Luigit
repositories / dotfiles

dotfiles

bugabingas dorkfiles

owned by admin

neovim/tests/bugabinga/pivi_status_spec.lua

Raw
---@diagnostic disable: duplicate-set-field, need-check-nil, param-type-mismatch, assign-type-mismatch
local statusline = require 'bugabinga.statusline'
local publisher = require 'bugabinga.pivi.publish'
local consumer = require 'bugabinga.pivi_status'

local publish = function( value ) vim.g.pivi = value end

local session = function( fields )
  return vim.tbl_extend( 'force', {
    name = 'work',
    connection = 'running',
    run = 'idle',
    queue = { steering = {}, follow_up = {}, },
    compacting = false,
    summary = 'pi:idle',
  }, fields or {} )
end

describe( 'pivi statusline consumer', function()
  after_each( function()
    vim.g.pivi = nil
  end )

  it( 'shows nothing when pivi never published anything', function()
    vim.g.pivi = nil
    assert.equal( '', consumer.component() )
  end )

  it( 'shows nothing for an unknown active session', function()
    publish { active = 'absent', sessions = {}, }
    assert.equal( '', consumer.component() )
  end )

  it( 'shows a quiet marker while idle', function()
    publish { active = 'work', sessions = { work = session(), }, }
    assert.equal( 'π', consumer.component() )
  end )

  it( 'animates and names the running tool', function()
    publish { active = 'work', sessions = {
      work = session { run = 'running', tool = { id = 'c1', name = 'edit', }, },
    }, }

    local shown = consumer.component()
    assert.is_true( shown:find( 'edit', 1, true ) ~= nil )
    assert.is_true( #shown > #'π edit' )
  end )

  it( 'reports thinking, retry, compaction, and error distinctly', function()
    local seen = {}
    for _, fields in ipairs {
      { run = 'running', },
      { run = 'retrying', },
      { compacting = true, },
      { error = 'boom', },
    } do
      publish { active = 'work', sessions = { work = session( fields ), }, }
      table.insert( seen, consumer.component() )
    end

    assert.is_true( seen[1]:find( 'thinking', 1, true ) ~= nil )
    assert.is_true( seen[2]:find( 'retry', 1, true ) ~= nil )
    assert.is_true( seen[3]:find( 'compacting', 1, true ) ~= nil )
    assert.is_true( seen[4]:find( 'error', 1, true ) ~= nil )
  end )

  it( 'counts queued submissions', function()
    publish { active = 'work', sessions = {
      work = session { queue = { steering = { 'a', }, follow_up = { 'b', 'c', }, }, },
    }, }

    assert.is_true( consumer.component():find( '+3', 1, true ) ~= nil )
  end )

  it( 'never treats a stopped session as busy', function()
    assert.is_false( consumer.busy( session { connection = 'stopped', run = 'running', } ) )
  end )

  it( 'announces findings that reached the quickfix list', function()
    local seen = {}
    local original = vim.notify
    vim.notify = function( message ) table.insert( seen, message ) end

    publisher.activity { kind = 'findings', count = 3, }
    publisher.activity { kind = 'findings', count = 0, }
    publisher.activity { kind = 'edit', }

    vim.notify = original

    assert.equal( 1, #seen )
    assert.is_true( seen[1]:find( '3 findings', 1, true ) ~= nil )
  end )

  it( 'is registered with the statusline and evaluates without pivi loaded', function()
    package.loaded['bugabinga.pivi'] = nil
    vim.g.pivi = nil

    local rendered = statusline.plugins_component()

    assert.is_string( rendered )
    assert.is_nil( package.loaded['bugabinga.pivi'] )
  end )
end )