77 lines
1.5 KiB
Markdown
77 lines
1.5 KiB
Markdown
# Tests and Validation
|
|
|
|
## 1. Principle
|
|
|
|
A feature is not complete without its relevant validation.
|
|
|
|
## 2. Validation layers
|
|
|
|
Trainlog will use:
|
|
|
|
- unit tests;
|
|
- integration tests;
|
|
- JSON Schema validation;
|
|
- database constraint tests;
|
|
- TUI smoke tests;
|
|
- sanitizer builds where practical.
|
|
|
|
## 3. Exchange-format tests
|
|
|
|
The repository must contain valid and invalid fixtures.
|
|
|
|
Valid fixtures must pass the schema.
|
|
|
|
Invalid fixtures should cover:
|
|
|
|
- missing required fields;
|
|
- duplicate exercise identifiers;
|
|
- invalid timestamps;
|
|
- invalid negative values;
|
|
- empty set data;
|
|
- malformed targets;
|
|
- unsupported format version.
|
|
|
|
## 4. Database tests
|
|
|
|
Tests must verify:
|
|
|
|
- foreign keys are active;
|
|
- duplicate `session_id` is rejected or handled idempotently;
|
|
- duplicate `exercise_id` is rejected;
|
|
- failed imports roll back completely;
|
|
- migrations preserve data.
|
|
|
|
## 5. C validation
|
|
|
|
Initial build validation should include:
|
|
|
|
```text
|
|
normal build
|
|
strict warning build
|
|
ASan/UBSan build
|
|
```
|
|
|
|
Exact commands will be frozen when `meson.build` exists.
|
|
|
|
## 6. TUI tests
|
|
|
|
At minimum:
|
|
|
|
- application starts in a supported terminal;
|
|
- small-terminal fallback works;
|
|
- navigation does not corrupt state;
|
|
- UTF-8 labels render correctly;
|
|
- monochrome fallback remains understandable.
|
|
|
|
## 7. Pre-push checklist
|
|
|
|
Before a meaningful push:
|
|
|
|
1. format code;
|
|
2. build;
|
|
3. run tests;
|
|
4. validate JSON fixtures;
|
|
5. run sanitizer suite when relevant;
|
|
6. run `git diff --check`;
|
|
7. inspect `git status`;
|
|
8. update documentation.
|