pending.nvim/spec
Barrett Ruth 0cf3d29972 fix(oauth): resolve re-auth deadlock and improve flow robustness (#87)
* fix(oauth): resolve re-auth deadlock and improve flow robustness

Problem: in-flight TCP server held port 18392 for up to 120 seconds.
Calling `auth()` again caused `bind()` to fail silently — the browser
opened but no listener could receive the OAuth callback. `_wipe()` on
exchange failure also destroyed credentials, forcing full re-setup.

Solution: `_active_close` at module scope cancels any in-flight server
when `auth()` or `clear_tokens()` is called. Binding is guarded with
`pcall`; the browser only opens after the server is listening. Swapped
`_wipe()` for `clear_tokens()` in `_exchange_code` to preserve
credentials on failure. Added `select_account` to `prompt` so Google
always shows the account picker on re-auth.

* test(oauth): isolate bundled-credentials fallback from real filesystem

Problem: `resolve_credentials` reads from `vim.fn.stdpath('data')`,
the real Neovim data dir. The test passed only because `_wipe()` was
incidentally deleting the user's credential file mid-run.

Solution: stub `oauth.load_json_file` for the duration of the test so
real credential files cannot interfere with the fallback assertion.

* ci: format
2026-03-06 15:47:42 -05:00
..
archive_spec.lua refactor: organize tests and dry (#49) 2026-02-26 20:03:42 -05:00
complete_spec.lua refactor(config): remove legacy gcal top-level config key (#51) 2026-02-26 22:53:51 -05:00
diff_spec.lua fix(diff): preserve due/rec when absent from buffer line (#68) 2026-03-05 12:46:54 -05:00
edit_spec.lua refactor: organize tests and dry (#49) 2026-02-26 20:03:42 -05:00
filter_spec.lua refactor: organize tests and dry (#49) 2026-02-26 20:03:42 -05:00
gtasks_spec.lua feat(sync): diff metadata preservation, auth unification, and sync quality improvements (#74) 2026-03-05 22:40:19 -05:00
helpers.lua test: add store, parse, and diff specs 2026-02-24 15:10:09 -05:00
icons_spec.lua refactor(icons): ascii defaults, checkbox overlays, and cleanup (#57) 2026-03-04 18:44:41 -05:00
oauth_spec.lua fix(oauth): resolve re-auth deadlock and improve flow robustness (#87) 2026-03-06 15:47:42 -05:00
parse_spec.lua fix(diff): preserve due/rec when absent from buffer line (#68) 2026-03-05 12:46:54 -05:00
recur_spec.lua feat: omnifunc completion, recurring tasks, expanded date syntax (#27) 2026-02-25 13:27:52 -05:00
status_spec.lua refactor: organize tests and dry (#49) 2026-02-26 20:03:42 -05:00
store_spec.lua refactor: organize tests and dry (#49) 2026-02-26 20:03:42 -05:00
sync_spec.lua feat(sync): unify Google auth under :Pending auth (#72) 2026-03-05 21:08:22 -05:00
textobj_spec.lua feat: text objects and motions for the pending buffer (#39) 2026-02-26 16:28:58 -05:00
views_spec.lua refactor(icons): ascii defaults, checkbox overlays, and cleanup (#57) 2026-03-04 18:44:41 -05:00