● LIVE DEMO — interactive, preset sample data (module “Pay in shop”). Nothing is installed or tested. Click the tabs and any matrix cell to explore.
Automated testing for PrestaShop modules
What do you want to do?
Pick one — ChaosLab runs it and takes you to a report at the end.
1
Static analysis
structure, security & syntax across every PHP version — instant, nothing is installed
ChaosLab
Automated testing for PrestaShop modules
Analyze a PrestaShop module
Upload the module .zip archive — the whole module, exactly as at install.
What it checks — static
Structure & PrestaShop Addons rules
Security — SQL, XSS, AJAX token, forbidden functions
Real PHP compatibility 7.1 → 8.4
PrestaShop compatibility, up to 9.x
Architecture — hooks, minimal override, no N+1
Coding standards — English, cleanliness, protected files
Plus, live on PrestaShop — runtime
Real install & uninstall on each PS × PHP
Runtime errors from hooks, in debug mode
Hooks exercised with real demo data (product, cart, order)
DB queries & time per hook — real N+1 detection
Strict SQL mode check (breaks on strict hosts)
Clean database after uninstall — no leftovers
87/100
Pay in shop v1.1.0
payinshop · 10 PHP files
Needs fixing
NEEDS ATTENTION
1
Blocking errors
32
Warnings
28
Info

Real compatibility per PHP version

checked on 10 files · real parser
Checks whether the module's code compiles on each PHP version — i.e. it does not use syntax newer than the version supports (e.g. PHP 8 syntax on PHP 7.4). It does not run the module; it only confirms each version can read/parse it.
PHP 7.1 ✓ passes
PHP 7.2 ✓ passes
PHP 7.3 ✓ passes
PHP 7.4 ✓ passes
PHP 8.0 ✓ passes
PHP 8.1 ✓ passes
PHP 8.2 ✓ passes
PHP 8.3 ✓ passes
PHP 8.4 ✓ passes
PHP 8.5 ✓ passes
Overall score87/100
Errors
12/12
Structure1
14/15
Compatibility2
18/20
Security1
16/25
Optimizations2
8/8
Translations29
4/5
Licenses6
5/5
Standards20
10/10
SEC-HTACCESS Missing .htaccess in the root
  • (module)
ENGLISH-COMMENT Comment that does not look English — Addons requires code, comments and default text in English 28×
  • payinshop.php:12
  • payinshop.php:15
  • payinshop.php:18
  • payinshop.php:21
  • payinshop.php:24
  • payinshop.php:27
  • payinshop.php:30
  • payinshop.php:33
  • payinshop.php:36
  • payinshop.php:39
  • payinshop.php:42
  • payinshop.php:45
  • payinshop.php:48
  • payinshop.php:51
  • payinshop.php:54
  • payinshop.php:57
  • payinshop.php:60
  • payinshop.php:63
  • payinshop.php:66
  • payinshop.php:69
  • payinshop.php:72
  • payinshop.php:75
  • payinshop.php:78
  • payinshop.php:81
  • payinshop.php:84
  • payinshop.php:87
  • payinshop.php:90
  • payinshop.php:93
ADDONS-MODULEKEY Missing $this->module_key in the constructor — required at Addons validation
  • payinshop.php:42
NON-ENGLISH-STRING $this->description does not look English — the Addons validator requires the default text in English
  • payinshop.php:55
COMPLIANCY-VERSIONCONST _PS_VERSION_ used in ps_versions_compliancy — set a fixed value
  • payinshop.php:38
COMPAT-MODULEMETHOD Call $this->module->validateOrder
  • controllers/front/validation.php:61
STANDARDS-ARRAYSYNTAX Old array 20×
  • payinshop.php:70
  • payinshop.php:74
  • payinshop.php:78
  • payinshop.php:82
  • payinshop.php:86
  • payinshop.php:90
  • payinshop.php:94
  • payinshop.php:98
  • payinshop.php:102
  • payinshop.php:106
  • payinshop.php:110
  • payinshop.php:114
  • payinshop.php:118
  • payinshop.php:122
  • payinshop.php:126
  • payinshop.php:130
  • payinshop.php:134
  • payinshop.php:138
  • payinshop.php:142
  • payinshop.php:146
LICENSE-HEADER Missing license header
  • payinshop.php:1
  • index.php:1
  • controllers/front/validation.php:1
  • classes/PayinshopOrder.php:1
  • views/templates/hook/payment.tpl.php:1
  • upgrade/upgrade-1.1.0.php:1
PERF-NPLUSONE Possible N+1: ObjectModel instantiation inside a loop
  • classes/PayinshopOrder.php:120
  • payinshop.php:150
2
Runtime test
real install & run on each PrestaShop × PHP — catches errors that only appear live

Live analysis on PrestaShop

Your module is really installed, run and uninstalled on each PrestaShop × PHP combination you pick — with _PS_MODE_DEV_ on — catching version-specific errors static analysis can't. 100% local: a portable PrestaShop + database, no Docker, nothing installed on your PC.
1
Installs each PrestaShop

Real install on a portable DB engine, isolated per version — restored to a clean snapshot before every combination.

2
Runs install → hooks → uninstall

In debug mode, capturing every notice, warning and fatal your module raises at runtime.

3
Real demo data for the hooks

Hooks run with a real product, customer, cart and order from the demo shop — so data-driven hooks actually execute, not against an empty context.

4
Performance per hook (N+1)

Counts the DB queries and time each hook takes on real data. A hook firing many queries usually means N+1 — invisible on a small test shop, slow on a real store. Hooks with 25+ queries are flagged.

5
Strict SQL check

Re-installs under MySQL strict mode (STRICT_ALL_TABLES, no zero-dates). Catches SQL that works on lax hosts but breaks on strict ones (MySQL 5.7+/8.0).

6
Checks a clean uninstall

Verifies none of the tables, config or admin tabs the module created are left behind in the database after removal.

7
Fair verdict per cell

Tells your module's bugs apart from PrestaShop's own (core/env) — you're never blamed for the platform.

Coverage: 6 PrestaShop versions (1.7.8 → 9.1) × PHP 7.1 → 8.5 — up to 23 real combinations. Pick exactly which in the grid below.
cleanwarningsfatalcore/env!run error (re-run)·not runSStrict SQL (green=PASS, red=FAIL)
✅ Active — pick versions below, choose a module and press "Run the real test on PrestaShop".
ChaosLab
Automated testing for PrestaShop modules
Test on PrestaShop
Installs the module in a real PrestaShop 9.0 and runs it in debug mode to catch errors that only appear at install. (~30–60s)
🧩 Loaded module: payinshop — it will be tested. Pick a file only to test a different one.
What it will check
Real install & uninstall on each version
Runtime errors from hooks (debug mode)
Database cleanliness after uninstall
Bugs that only appear in a live PrestaShop
Choose what to test — click cells; click a PS row or PHP column for the whole line
PHP 7.17.27.37.48.08.18.28.38.48.5
PS 1.7.8
PS 8.0
PS 8.1
PS 8.2
PS 9.0
PS 9.1
Results 0/23 clean
PHP7.17.27.37.48.08.18.28.38.48.5
PS 1.7.8 SSSS
PS 8.0 SSSSS
PS 8.1 SSS
PS 8.2 SSS
PS 9.0 SSS
PS 9.1 SSSSS
cleanwarnfatalcore/env!rerunSStrict SQL

Findings

payinshop · 23 with issues
PS 1.7.8 · PHP 7.1 — WARNINGS
WARN: hookDisplayHeader uses Tools::jsonEncode() (deprecated) — use json_encode() (module)
NOTICE: hookActionValidateOrder fires 46 DB queries on the demo order (possible N+1) (module)
Strict SQL: PASS
PS 1.7.8 · PHP 7.2 — WARNINGS
WARN: hookDisplayHeader uses Tools::jsonEncode() (deprecated) — use json_encode() (module)
NOTICE: hookActionValidateOrder fires 38 DB queries on the demo order (possible N+1) (module)
Strict SQL: PASS
PS 1.7.8 · PHP 7.3 — WARNINGS
WARN: hookDisplayHeader uses Tools::jsonEncode() (deprecated) — use json_encode() (module)
NOTICE: hookActionValidateOrder fires 39 DB queries on the demo order (possible N+1) (module)
Strict SQL: PASS
PS 1.7.8 · PHP 7.4 — WARNINGS
WARN: hookDisplayHeader uses Tools::jsonEncode() (deprecated) — use json_encode() (module)
NOTICE: hookActionValidateOrder fires 40 DB queries on the demo order (possible N+1) (module)
Strict SQL: PASS
PS 8.0 · PHP 7.2 — WARNINGS
WARN: hookDisplayHeader uses Tools::jsonEncode() (deprecated) — use json_encode() (module)
NOTICE: hookActionValidateOrder fires 38 DB queries on the demo order (possible N+1) (module)
Strict SQL: PASS
PS 8.0 · PHP 7.3 — WARNINGS
WARN: hookDisplayHeader uses Tools::jsonEncode() (deprecated) — use json_encode() (module)
NOTICE: hookActionValidateOrder fires 39 DB queries on the demo order (possible N+1) (module)
Strict SQL: PASS
PS 8.0 · PHP 7.4 — WARNINGS
WARN: hookDisplayHeader uses Tools::jsonEncode() (deprecated) — use json_encode() (module)
NOTICE: hookActionValidateOrder fires 40 DB queries on the demo order (possible N+1) (module)
Strict SQL: PASS
PS 8.0 · PHP 8.0 — WARNINGS
WARN: hookDisplayHeader uses Tools::jsonEncode() (deprecated) — use json_encode() (module)
NOTICE: hookActionValidateOrder fires 46 DB queries on the demo order (possible N+1) (module)
Strict SQL: PASS
PS 8.0 · PHP 8.1 — WARNINGS
WARN: hookDisplayHeader uses Tools::jsonEncode() (deprecated) — use json_encode() (module)
NOTICE: hookActionValidateOrder fires 38 DB queries on the demo order (possible N+1) (module)
Strict SQL: PASS
PS 8.1 · PHP 7.4 — WARNINGS
WARN: hookDisplayHeader uses Tools::jsonEncode() (deprecated) — use json_encode() (module)
NOTICE: hookActionValidateOrder fires 40 DB queries on the demo order (possible N+1) (module)
Strict SQL: PASS
PS 8.1 · PHP 8.0 — WARNINGS
WARN: hookDisplayHeader uses Tools::jsonEncode() (deprecated) — use json_encode() (module)
NOTICE: hookActionValidateOrder fires 46 DB queries on the demo order (possible N+1) (module)
Strict SQL: PASS
PS 8.1 · PHP 8.1 — WARNINGS
WARN: hookDisplayHeader uses Tools::jsonEncode() (deprecated) — use json_encode() (module)
NOTICE: hookActionValidateOrder fires 38 DB queries on the demo order (possible N+1) (module)
Strict SQL: PASS
PS 8.2 · PHP 8.1 — WARNINGS
WARN: hookDisplayHeader uses Tools::jsonEncode() (deprecated) — use json_encode() (module)
NOTICE: hookActionValidateOrder fires 38 DB queries on the demo order (possible N+1) (module)
Strict SQL: PASS
PS 8.2 · PHP 8.2 — WARNINGS
WARN: hookDisplayHeader uses Tools::jsonEncode() (deprecated) — use json_encode() (module)
NOTICE: hookActionValidateOrder fires 39 DB queries on the demo order (possible N+1) (module)
Strict SQL: PASS
PS 8.2 · PHP 8.3 — WARNINGS
WARN: hookDisplayHeader uses Tools::jsonEncode() (deprecated) — use json_encode() (module)
NOTICE: hookActionValidateOrder fires 40 DB queries on the demo order (possible N+1) (module)
Strict SQL: PASS
PS 9.0 · PHP 8.1 — WARNINGS
WARN: hookDisplayHeader uses Tools::jsonEncode() (deprecated) — use json_encode() (module)
NOTICE: hookActionValidateOrder fires 38 DB queries on the demo order (possible N+1) (module)
Strict SQL: PASS
PS 9.0 · PHP 8.2 — WARNINGS
WARN: hookDisplayHeader uses Tools::jsonEncode() (deprecated) — use json_encode() (module)
NOTICE: hookActionValidateOrder fires 39 DB queries on the demo order (possible N+1) (module)
Strict SQL: PASS
PS 9.0 · PHP 8.3 — WARNINGS
WARN: hookDisplayHeader uses Tools::jsonEncode() (deprecated) — use json_encode() (module)
NOTICE: hookActionValidateOrder fires 40 DB queries on the demo order (possible N+1) (module)
Strict SQL: PASS
PS 9.1 · PHP 8.1 — WARNINGS
WARN: hookDisplayHeader uses Tools::jsonEncode() (deprecated) — use json_encode() (module)
NOTICE: hookActionValidateOrder fires 38 DB queries on the demo order (possible N+1) (module)
Strict SQL: PASS
PS 9.1 · PHP 8.2 — WARNINGS
WARN: hookDisplayHeader uses Tools::jsonEncode() (deprecated) — use json_encode() (module)
NOTICE: hookActionValidateOrder fires 39 DB queries on the demo order (possible N+1) (module)
Strict SQL: PASS
PS 9.1 · PHP 8.3 — WARNINGS
WARN: hookDisplayHeader uses Tools::jsonEncode() (deprecated) — use json_encode() (module)
NOTICE: hookActionValidateOrder fires 40 DB queries on the demo order (possible N+1) (module)
Strict SQL: PASS
PS 9.1 · PHP 8.4 — WARNINGS
WARN: hookDisplayHeader uses Tools::jsonEncode() (deprecated) — use json_encode() (module)
NOTICE: hookActionValidateOrder fires 41 DB queries on the demo order (possible N+1) (module)
Strict SQL: PASS
PS 9.1 · PHP 8.5 — WARNINGS
WARN: hookDisplayHeader uses Tools::jsonEncode() (deprecated) — use json_encode() (module)
NOTICE: hookActionValidateOrder fires 42 DB queries on the demo order (possible N+1) (module)
Strict SQL: PASS

Runtime performance

DB queries & time per hook · catches N+1
How many database queries each hook fires and how long it takes, on real demo data. A hook doing many queries usually means N+1 — one query repeated in a loop (per product/row) — which is invisible on a small test shop but slows a real store with lots of data. Hooks with 25+ queries are flagged as possible N+1.
PS 1.7.8 · PHP 7.1 60 queries · 184 ms total
hookActionValidateOrder — 46 queries, 46 ms ← heavy (possible N+1)
hookDisplayHeader — 3 queries, 8 ms
hookDisplayOverrideTemplate — 6 queries, 11 ms
PS 1.7.8 · PHP 7.2 52 queries · 120 ms total
hookActionValidateOrder — 38 queries, 52 ms ← heavy (possible N+1)
hookDisplayHeader — 3 queries, 8 ms
hookDisplayOverrideTemplate — 6 queries, 11 ms
PS 1.7.8 · PHP 7.3 53 queries · 128 ms total
hookActionValidateOrder — 39 queries, 58 ms ← heavy (possible N+1)
hookDisplayHeader — 3 queries, 8 ms
hookDisplayOverrideTemplate — 6 queries, 11 ms
PS 1.7.8 · PHP 7.4 54 queries · 136 ms total
hookActionValidateOrder — 40 queries, 64 ms ← heavy (possible N+1)
hookDisplayHeader — 3 queries, 8 ms
hookDisplayOverrideTemplate — 6 queries, 11 ms
PS 8.0 · PHP 7.2 52 queries · 120 ms total
hookActionValidateOrder — 38 queries, 52 ms ← heavy (possible N+1)
hookDisplayHeader — 3 queries, 8 ms
hookDisplayOverrideTemplate — 6 queries, 11 ms
PS 8.0 · PHP 7.3 53 queries · 128 ms total
hookActionValidateOrder — 39 queries, 58 ms ← heavy (possible N+1)
hookDisplayHeader — 3 queries, 8 ms
hookDisplayOverrideTemplate — 6 queries, 11 ms
PS 8.0 · PHP 7.4 54 queries · 136 ms total
hookActionValidateOrder — 40 queries, 64 ms ← heavy (possible N+1)
hookDisplayHeader — 3 queries, 8 ms
hookDisplayOverrideTemplate — 6 queries, 11 ms
PS 8.0 · PHP 8.0 60 queries · 184 ms total
hookActionValidateOrder — 46 queries, 40 ms ← heavy (possible N+1)
hookDisplayHeader — 3 queries, 8 ms
hookDisplayOverrideTemplate — 6 queries, 11 ms
PS 8.0 · PHP 8.1 52 queries · 120 ms total
hookActionValidateOrder — 38 queries, 46 ms ← heavy (possible N+1)
hookDisplayHeader — 3 queries, 8 ms
hookDisplayOverrideTemplate — 6 queries, 11 ms
PS 8.1 · PHP 7.4 54 queries · 136 ms total
hookActionValidateOrder — 40 queries, 64 ms ← heavy (possible N+1)
hookDisplayHeader — 3 queries, 8 ms
hookDisplayOverrideTemplate — 6 queries, 11 ms
PS 8.1 · PHP 8.0 60 queries · 184 ms total
hookActionValidateOrder — 46 queries, 40 ms ← heavy (possible N+1)
hookDisplayHeader — 3 queries, 8 ms
hookDisplayOverrideTemplate — 6 queries, 11 ms
PS 8.1 · PHP 8.1 52 queries · 120 ms total
hookActionValidateOrder — 38 queries, 46 ms ← heavy (possible N+1)
hookDisplayHeader — 3 queries, 8 ms
hookDisplayOverrideTemplate — 6 queries, 11 ms
PS 8.2 · PHP 8.1 52 queries · 120 ms total
hookActionValidateOrder — 38 queries, 46 ms ← heavy (possible N+1)
hookDisplayHeader — 3 queries, 8 ms
hookDisplayOverrideTemplate — 6 queries, 11 ms
PS 8.2 · PHP 8.2 53 queries · 128 ms total
hookActionValidateOrder — 39 queries, 52 ms ← heavy (possible N+1)
hookDisplayHeader — 3 queries, 8 ms
hookDisplayOverrideTemplate — 6 queries, 11 ms
PS 8.2 · PHP 8.3 54 queries · 136 ms total
hookActionValidateOrder — 40 queries, 58 ms ← heavy (possible N+1)
hookDisplayHeader — 3 queries, 8 ms
hookDisplayOverrideTemplate — 6 queries, 11 ms
PS 9.0 · PHP 8.1 52 queries · 120 ms total
hookActionValidateOrder — 38 queries, 46 ms ← heavy (possible N+1)
hookDisplayHeader — 3 queries, 8 ms
hookDisplayOverrideTemplate — 6 queries, 11 ms
PS 9.0 · PHP 8.2 53 queries · 128 ms total
hookActionValidateOrder — 39 queries, 52 ms ← heavy (possible N+1)
hookDisplayHeader — 3 queries, 8 ms
hookDisplayOverrideTemplate — 6 queries, 11 ms
PS 9.0 · PHP 8.3 54 queries · 136 ms total
hookActionValidateOrder — 40 queries, 58 ms ← heavy (possible N+1)
hookDisplayHeader — 3 queries, 8 ms
hookDisplayOverrideTemplate — 6 queries, 11 ms
PS 9.1 · PHP 8.1 52 queries · 120 ms total
hookActionValidateOrder — 38 queries, 46 ms ← heavy (possible N+1)
hookDisplayHeader — 3 queries, 8 ms
hookDisplayOverrideTemplate — 6 queries, 11 ms
PS 9.1 · PHP 8.2 53 queries · 128 ms total
hookActionValidateOrder — 39 queries, 52 ms ← heavy (possible N+1)
hookDisplayHeader — 3 queries, 8 ms
hookDisplayOverrideTemplate — 6 queries, 11 ms
PS 9.1 · PHP 8.3 54 queries · 136 ms total
hookActionValidateOrder — 40 queries, 58 ms ← heavy (possible N+1)
hookDisplayHeader — 3 queries, 8 ms
hookDisplayOverrideTemplate — 6 queries, 11 ms
PS 9.1 · PHP 8.4 55 queries · 144 ms total
hookActionValidateOrder — 41 queries, 64 ms ← heavy (possible N+1)
hookDisplayHeader — 3 queries, 8 ms
hookDisplayOverrideTemplate — 6 queries, 11 ms
PS 9.1 · PHP 8.5 56 queries · 152 ms total
hookActionValidateOrder — 42 queries, 40 ms ← heavy (possible N+1)
hookDisplayHeader — 3 queries, 8 ms
hookDisplayOverrideTemplate — 6 queries, 11 ms

ChaosLab · static analysis + real php -l on the installed PHP versions. Runs locally, on your computer.

Analyzing the module…
Preparing…
Checking structure and Addons rules, plus whether the module compiles on each PHP version (syntax), not the actual execution.