Transport integration test

body ## Location `src/test/TransportTest.cpp` — added to the existing `coretest` GTest binary. ## What it tests End-to-end lifecycle of a pwsafe database opened via a `file://` URL, exercising the full transport intercept chain (`FOpen` → cache fetch → `FClose` → `store`). Deliberately uses the highest-level API (`PWScore`) rather than `PWSfileV3` directly. ## Scenario (single TEST_F) 1. **Create** a fresh `.psafe3` at a local path; open it via a `file://` URL (`NewFile` + `WriteFile`). 2. **Add Entry 1** — group `Test.Transport`, title `Entry1`, password generated by `CPasswordCharPool` / `PWPolicy`; stash generated password in a local `StringX`. 3. **Add Entry 2** — same group, title `Entry2`, known constant password. 4. **Read back Entry 1** — `PWScore::Find(group, title, user)`, assert password equals stashed value. 5. **Change Entry 1's password** — `EditEntryCommand` with updated item. 6. **Add Entry 3** — same group, title `Entry3`, any password. 7. **Save and close** — `WriteFile(url, V30)`; transport `store()` fires. 8. **Reopen** via same `file://` URL — `ReadDatabase`; assert all 3 entries present and correct. 9. **Cache vs destination** — binary compare `pws_get_cache_path(url)` vs actual file path; hard FAIL if different. ## Key API calls - `PWScore::NewFile(passkey)` — initialise new db in memory - `PWScore::WriteFile(url, PWSfile::V30)` — write via transport (triggers store) - `PWScore::ReadDatabase(url, passkey, ...)` — open via transport (triggers fetch) - `PWScore::Find(group, title, user)` — locate entry by group+title - `CPasswordCharPool(policy).MakePassword()` — generate random password - `EditEntryCommand::Create(core, old, new)` — change password via command pattern - `pws_get_cache_path(utf8_url)` — get cache file path for comparison ## Plugin availability Compiled with `-DDEVELOPMENT` so `find_plugin_path` searches cwd. CMakeLists copies `pwsafe-file.so` alongside `coretest` binary at build time. ## Build wiring Add `TransportTest.cpp` to `TEST_SRCS` in `src/test/CMakeLists.txt`. No extra link libraries (transport already in `os`).  ·  children