feat(sync): unify Google auth under :Pending auth

Problem: users had to run `:Pending gtasks auth` and `:Pending gcal
auth` separately, producing two token files and two browser consents
for the same Google account.

Solution: introduce `oauth.google_client` with combined tasks +
calendar scopes and a single `google_tokens.json`. Remove per-backend
`auth`/`setup` from `gcal` and `gtasks`; add top-level `:Pending auth`
that prompts with `vim.ui.select` and delegates to the shared client's
`setup()` or `auth()` based on credential availability.
This commit is contained in:
Barrett Ruth 2026-03-05 20:35:14 -05:00
parent 87d8bf0896
commit 67aa8d71e6
6 changed files with 45 additions and 54 deletions

View file

@ -73,15 +73,14 @@ describe('sync', function()
assert.is_true(called)
end)
it('routes auth action', function()
it('routes auth command', function()
local called = false
local gcal = require('pending.sync.gcal')
local orig_auth = gcal.auth
gcal.auth = function()
local orig_auth = pending.auth
pending.auth = function()
called = true
end
pending.command('gcal auth')
gcal.auth = orig_auth
pending.command('auth')
pending.auth = orig_auth
assert.is_true(called)
end)
end)
@ -102,11 +101,6 @@ describe('sync', function()
assert.are.equal('gcal', gcal.name)
end)
it('has auth function', function()
local gcal = require('pending.sync.gcal')
assert.are.equal('function', type(gcal.auth))
end)
it('has push function', function()
local gcal = require('pending.sync.gcal')
assert.are.equal('function', type(gcal.push))