diff --git a/lua/cp/pickers/init.lua b/lua/cp/pickers/init.lua index 096edfa..2380b74 100644 --- a/lua/cp/pickers/init.lua +++ b/lua/cp/pickers/init.lua @@ -117,8 +117,6 @@ end ---@param contest_id string Contest identifier ---@return cp.ProblemItem[] local function get_problems_for_contest(platform, contest_id) - local constants = require('cp.constants') - local platform_display_name = constants.PLATFORM_DISPLAY_NAMES[platform] or platform local problems = {} cache.load() diff --git a/spec/picker_spec.lua b/spec/picker_spec.lua deleted file mode 100644 index e9bb5e2..0000000 --- a/spec/picker_spec.lua +++ /dev/null @@ -1,241 +0,0 @@ -describe('cp.picker', function() - local picker - local spec_helper = require('spec.spec_helper') - - before_each(function() - spec_helper.setup() - picker = require('cp.pickers') - end) - - after_each(function() - spec_helper.teardown() - end) - - describe('get_platforms', function() - it('returns platform list with display names', function() - local platforms = picker.get_platforms() - - assert.is_table(platforms) - assert.is_true(#platforms > 0) - - for _, platform in ipairs(platforms) do - assert.is_string(platform.id) - assert.is_string(platform.display_name) - assert.is_not_nil(platform.display_name:match('^%u')) - end - end) - - it('includes expected platforms with correct display names', function() - local platforms = picker.get_platforms() - local platform_map = {} - for _, p in ipairs(platforms) do - platform_map[p.id] = p.display_name - end - - assert.equals('CodeForces', platform_map['codeforces']) - assert.equals('AtCoder', platform_map['atcoder']) - assert.equals('CSES', platform_map['cses']) - end) - end) - - describe('get_contests_for_platform', function() - it('returns empty list when scraper fails', function() - vim.system = function(_, _) - return { - wait = function() - return { code = 1, stderr = 'test error' } - end, - } - end - - local contests = picker.get_contests_for_platform('test_platform') - assert.is_table(contests) - assert.equals(0, #contests) - end) - - it('returns empty list when JSON is invalid', function() - vim.system = function(_, _) - return { - wait = function() - return { code = 0, stdout = 'invalid json' } - end, - } - end - - local contests = picker.get_contests_for_platform('test_platform') - assert.is_table(contests) - assert.equals(0, #contests) - end) - - it('returns contest list when scraper succeeds', function() - local cache = require('cp.cache') - local utils = require('cp.utils') - - cache.load = function() end - cache.get_contest_list = function() - return nil - end - cache.set_contest_list = function() end - - utils.setup_python_env = function() - return true - end - utils.get_plugin_path = function() - return '/test/path' - end - - vim.system = function(_, _) - return { - wait = function() - return { - code = 0, - stdout = vim.json.encode({ - success = true, - contests = { - { - id = 'abc123', - name = 'AtCoder Beginner Contest 123', - display_name = 'Beginner Contest 123 (ABC)', - }, - { - id = '1951', - name = 'Educational Round 168', - display_name = 'Educational Round 168', - }, - }, - }), - } - end, - } - end - - local contests = picker.get_contests_for_platform('test_platform') - assert.is_table(contests) - assert.equals(2, #contests) - assert.equals('abc123', contests[1].id) - assert.equals('AtCoder Beginner Contest 123', contests[1].name) - assert.equals('Beginner Contest 123 (ABC)', contests[1].display_name) - end) - end) - - describe('get_problems_for_contest', function() - it('returns problems from cache when available', function() - local cache = require('cp.cache') - cache.load = function() end - cache.get_contest_data = function(_, _) - return { - problems = { - { id = 'a', name = 'Problem A' }, - { id = 'b', name = 'Problem B' }, - }, - } - end - - local problems = picker.get_problems_for_contest('test_platform', 'test_contest') - assert.is_table(problems) - assert.equals(2, #problems) - assert.equals('a', problems[1].id) - assert.equals('Problem A', problems[1].name) - assert.equals('Problem A', problems[1].display_name) - end) - - it('falls back to scraping when cache miss', function() - local cache = require('cp.cache') - local utils = require('cp.utils') - - cache.load = function() end - cache.get_contest_data = function(_, _) - return nil - end - cache.set_contest_data = function() end - - utils.setup_python_env = function() - return true - end - utils.get_plugin_path = function() - return '/tmp' - end - - -- Mock vim.system to return success with problems - vim.system = function() - return { - wait = function() - return { - code = 0, - stdout = vim.json.encode({ - success = true, - problems = { - { id = 'x', name = 'Problem X' }, - }, - }), - } - end, - } - end - - picker = spec_helper.fresh_require('cp.pickers', { 'cp.pickers.init' }) - - local problems = picker.get_problems_for_contest('test_platform', 'test_contest') - assert.is_table(problems) - assert.equals(1, #problems) - assert.equals('x', problems[1].id) - end) - - it('returns empty list when scraping fails', function() - local cache = require('cp.cache') - local utils = require('cp.utils') - - cache.load = function() end - cache.get_contest_data = function(_, _) - return nil - end - - utils.setup_python_env = function() - return true - end - utils.get_plugin_path = function() - return '/tmp' - end - - vim.system = function() - return { - wait = function() - return { - code = 1, - stderr = 'Scraping failed', - } - end, - } - end - - picker = spec_helper.fresh_require('cp.pickers', { 'cp.pickers.init' }) - - local problems = picker.get_problems_for_contest('test_platform', 'test_contest') - assert.is_table(problems) - assert.equals(0, #problems) - end) - end) - - describe('setup_problem', function() - it('calls cp.handle_command with correct arguments', function() - local cp = require('cp') - local called_with = nil - - cp.handle_command = function(opts) - called_with = opts - end - - picker.setup_problem('codeforces', '1951', 'a') - - vim.wait(100, function() - return called_with ~= nil - end) - - assert.is_table(called_with) - assert.is_table(called_with.fargs) - assert.equals('codeforces', called_with.fargs[1]) - assert.equals('1951', called_with.fargs[2]) - assert.equals('a', called_with.fargs[3]) - end) - end) -end)