233 lines
7.9 KiB
Markdown
233 lines
7.9 KiB
Markdown
# CodiMD CLI - Test Plan and Results
|
|
|
|
## Test Plan
|
|
|
|
### Unit Tests (`test_core.py`)
|
|
|
|
#### Config Tests
|
|
- Test default configuration values
|
|
- Test configuration persistence
|
|
- Test configuration updates (server, timeout, verify_ssl)
|
|
|
|
#### Session Tests
|
|
- Test session creation
|
|
- Test cookie storage and retrieval
|
|
- Test user data storage
|
|
- Test session expiration
|
|
- Test session clearing
|
|
|
|
#### Client Tests
|
|
- Test URL building
|
|
- Test HTTP methods (GET, POST, PUT, DELETE)
|
|
- Test cookie management
|
|
- Test SSL verification setting
|
|
|
|
#### Note Manager Tests
|
|
- Test note ID encoding/decoding (UUID to base64url)
|
|
- Test note list parsing
|
|
- Test note creation request formatting
|
|
- Test note update request formatting
|
|
|
|
#### Export Manager Tests
|
|
- Test markdown export
|
|
- Test export with file output
|
|
- Test error handling for unauthorized exports
|
|
|
|
### E2E Tests (`test_full_e2e.py`)
|
|
|
|
#### Configuration Tests
|
|
- Test CLI configuration with `--server` flag
|
|
- Test JSON output mode with `--json` flag
|
|
|
|
#### Note Command Tests
|
|
- Test `note list` command
|
|
- Test `note create` command
|
|
- Test `note get` command
|
|
- Test `note info` command
|
|
|
|
#### Export Command Tests
|
|
- Test `export markdown` command
|
|
- Test `export html` command
|
|
|
|
#### User Command Tests
|
|
- Test `user me` command
|
|
- Test `user logout` command
|
|
|
|
### Subprocess Tests
|
|
- Test installed CLI via `_resolve_cli()` method
|
|
- Test with `CLI_ANYTHING_FORCE_INSTALLED=1` environment variable
|
|
- Verify CLI is available in PATH
|
|
|
|
## Test Requirements
|
|
|
|
- Python 3.7+
|
|
- pytest for test execution
|
|
- requests-mock for HTTP mocking
|
|
- pytest-subprocess for subprocess testing
|
|
|
|
## Mock Data
|
|
|
|
### Mock User
|
|
```json
|
|
{
|
|
"id": "12345678-1234-1234-1234-123456789012",
|
|
"profile": {
|
|
"name": "Test User",
|
|
"email": "test@example.com"
|
|
},
|
|
"email": "test@example.com"
|
|
}
|
|
```
|
|
|
|
### Mock Note List
|
|
```json
|
|
{
|
|
"myNotes": [
|
|
{
|
|
"id": "VXDECB3HEXDPHWHGHFDGWEDFBM",
|
|
"text": "Test Note 1",
|
|
"shortId": "abc123",
|
|
"createdAt": "2024-01-01T00:00:00.000Z",
|
|
"lastchangeAt": "2024-01-01T01:00:00.000Z",
|
|
"tags": ["test"]
|
|
},
|
|
{
|
|
"id": "YTECB3HEXDPHWHGHFDGWEDFBZ",
|
|
"text": "Test Note 2",
|
|
"shortId": "def456",
|
|
"createdAt": "2024-01-02T00:00:00.000Z",
|
|
"lastchangeAt": "2024-01-02T01:00:00.000Z",
|
|
"tags": []
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
## Test Execution
|
|
|
|
Run all tests:
|
|
```bash
|
|
pytest -v --tb=no
|
|
```
|
|
|
|
Run only unit tests:
|
|
```bash
|
|
pytest test_core.py -v
|
|
```
|
|
|
|
Run only E2E tests:
|
|
```bash
|
|
pytest test_full_e2e.py -v
|
|
```
|
|
|
|
## Test Results
|
|
|
|
### Test Execution Summary
|
|
|
|
```
|
|
============================= test session starts ==============================
|
|
platform darwin -- Python 3.12.2, pytest-9.0.2, pluggy-1.6.0
|
|
collected 46 items
|
|
|
|
cli_anything/codimd/tests/test_core.py::TestConfig::test_default_config PASSED
|
|
cli_anything/codimd/tests/test_core.py::TestConfig::test_config_persistence PASSED
|
|
cli_anything/codimd/tests/test_core.py::TestConfig::test_set_server PASSED
|
|
cli_anything/codimd/tests/test_core.py::TestConfig::test_set_timeout PASSED
|
|
cli_anything/codimd/tests/test_core.py::TestConfig::test_set_verify_ssl PASSED
|
|
cli_anything/codimd/tests/test_core.py::TestSession::test_session_creation PASSED
|
|
cli_anything/codimd/tests/test_core.py::TestSession::test_set_cookies PASSED
|
|
cli_anything/codimd/tests/test_core.py::TestSession::test_set_user PASSED
|
|
cli_anything/codimd/tests/test_core.py::TestSession::test_session_clear PASSED
|
|
cli_anything/codimd/tests/test_core.py::TestCodiMDClient::test_url_building PASSED
|
|
cli_anything/codimd/tests/test_core.py::TestCodiMDClient::test_url_trailing_slash PASSED
|
|
cli_anything/codimd/tests/test_core.py::TestCodiMDClient::test_session_cookies PASSED
|
|
cli_anything/codimd/tests/test_core.py::TestCodiMDClient::test_update_cookies PASSED
|
|
cli_anything/codimd/tests/test_core.py::TestCodiMDClient::test_ssl_setting PASSED
|
|
cli_anything/codimd/tests/test_core.py::TestNoteManager::test_encode_note_id PASSED
|
|
cli_anything/codimd/tests/test_core.py::TestNoteManager::test_decode_note_id PASSED
|
|
cli_anything/codimd/tests/test_core.py::TestNoteManager::test_encode_decode_roundtrip PASSED
|
|
cli_anything/codimd/tests/test_core.py::TestNoteManager::test_list_notes_success PASSED
|
|
cli_anything/codimd/tests/test_core.py::TestNoteManager::test_list_notes_unauthorized PASSED
|
|
cli_anything/codimd/tests/test_core.py::TestNoteManager::test_create_note_with_content PASSED
|
|
cli_anything/codimd/tests/test_core.py::TestNoteManager::test_delete_note_success PASSED
|
|
cli_anything/codimd/tests/test_core.py::TestUserManager::test_get_me_success PASSED
|
|
cli_anything/codimd/tests/test_core.py::TestUserManager::test_get_me_unauthorized PASSED
|
|
cli_anything/codimd/tests/test_core.py::TestUserManager::test_export_data_success PASSED
|
|
cli_anything/codimd/tests/test_core.py::TestExportManager::test_export_markdown_success PASSED
|
|
cli_anything/codimd/tests/test_core.py::TestExportManager::test_export_markdown_to_file PASSED
|
|
cli_anything/codimd/tests/test_core.py::TestExportManager::test_export_markdown_not_found PASSED
|
|
cli_anything/codimd/tests/test_core.py::TestExportManager::test_export_pdf_disabled PASSED
|
|
cli_anything/codimd/tests/test_core.py::TestRevisionManager::test_list_revisions_success PASSED
|
|
cli_anything/codimd/tests/test_core.py::TestRevisionManager::test_list_revisions_empty PASSED
|
|
cli_anything/codimd/tests/test_core.py::TestRevisionManager::test_get_revision_at_time PASSED
|
|
cli_anything/codimd/tests/test_full_e2e.py::TestCLISubprocess::test_cli_help PASSED
|
|
cli_anything/codimd/tests/test_full_e2e.py::TestCLISubprocess::test_cli_version PASSED
|
|
cli_anything/codimd/tests/test_full_e2e.py::TestE2EClickRunner::test_config_get_command PASSED
|
|
cli_anything/codimd/tests/test_full_e2e.py::TestE2EClickRunner::test_config_set_command PASSED
|
|
cli_anything/codimd/tests/test_full_e2e.py::TestE2EClickRunner::test_help_command PASSED
|
|
cli_anything/codimd/tests/test_full_e2e.py::TestE2EClickRunner::test_version_command PASSED
|
|
cli_anything/codimd/tests/test_full_e2e.py::TestE2EClickRunner::test_note_help PASSED
|
|
cli_anything/codimd/tests/test_full_e2e.py::TestE2EClickRunner::test_user_help PASSED
|
|
cli_anything/codimd/tests/test_full_e2e.py::TestE2EClickRunner::test_export_help PASSED
|
|
cli_anything/codimd/tests/test_full_e2e.py::TestE2EClickRunner::test_json_output_mode PASSED
|
|
cli_anything/codimd/tests/test_full_e2e.py::TestE2ENoteCommands::test_note_list_authenticated PASSED
|
|
cli_anything/codimd/tests/test_full_e2e.py::TestE2ENoteCommands::test_note_create PASSED
|
|
cli_anything/codimd/tests/test_full_e2e.py::TestE2EExportCommands::test_export_markdown_to_file PASSED
|
|
cli_anything/codimd/tests/test_full_e2e.py::TestE2EUserCommands::test_user_logout PASSED
|
|
cli_anything/codimd/tests/test_full_e2e.py::TestE2EUserCommands::test_user_me_unauthenticated PASSED
|
|
|
|
============================== 46 passed in 0.66s ==============================
|
|
```
|
|
|
|
### Test Coverage Summary
|
|
|
|
- **Total Tests**: 46
|
|
- **Passed**: 46 (100%)
|
|
- **Failed**: 0
|
|
|
|
#### Unit Tests (test_core.py)
|
|
- Config: 5/5 passed
|
|
- Session: 4/4 passed
|
|
- Client: 5/5 passed
|
|
- Note Manager: 6/6 passed
|
|
- User Manager: 3/3 passed
|
|
- Export Manager: 4/4 passed
|
|
- Revision Manager: 3/3 passed
|
|
|
|
#### E2E Tests (test_full_e2e.py)
|
|
- Subprocess tests: 2/2 passed
|
|
- Click Runner tests: 8/8 passed
|
|
- Note Commands: 2/2 passed
|
|
- Export Commands: 1/1 passed
|
|
- User Commands: 2/2 passed
|
|
|
|
### CLI Verification
|
|
|
|
```bash
|
|
$ which cli-anything-codimd
|
|
/Users/timmy/.pyenv/versions/3.12.2/bin/cli-anything-codimd
|
|
|
|
$ cli-anything-codimd --version
|
|
CodiMD CLI v0.1.0
|
|
|
|
$ cli-anything-codimd --help
|
|
Usage: cli-anything-codimd [OPTIONS] COMMAND [ARGS]...
|
|
|
|
CodiMD CLI - Collaborative markdown notes.
|
|
|
|
Options:
|
|
--version Show version and exit.
|
|
--json Output in JSON format
|
|
--server TEXT CodiMD server URL
|
|
--help Show this message and exit.
|
|
|
|
Commands:
|
|
config Configuration commands.
|
|
export Export operations.
|
|
note Note operations.
|
|
registry Registry operations.
|
|
repl Start interactive REPL mode.
|
|
revision Revision operations.
|
|
user User operations.
|
|
```
|