2024-05-04 10:15:37 +00:00
|
|
|
import unittest
|
|
|
|
from unittest.mock import patch
|
|
|
|
import os
|
|
|
|
|
|
|
|
os.system("ln -s kls kls.py")
|
|
|
|
|
2024-05-06 10:26:08 +00:00
|
|
|
import kls
|
2024-05-04 10:15:37 +00:00
|
|
|
|
|
|
|
|
|
|
|
class TestCircularList(unittest.TestCase):
|
|
|
|
def setUp(self):
|
2024-05-06 10:26:08 +00:00
|
|
|
self.circular_list = kls.CircularList(['a', 'b', 'c'])
|
2024-05-04 10:15:37 +00:00
|
|
|
|
|
|
|
def test_forward(self):
|
2024-05-06 08:18:44 +00:00
|
|
|
self.circular_list.shift(1)
|
2024-05-04 10:15:37 +00:00
|
|
|
self.assertEqual(self.circular_list.index, 1)
|
|
|
|
|
|
|
|
def test_backward(self):
|
2024-05-06 08:18:44 +00:00
|
|
|
self.circular_list.shift(-1)
|
2024-05-04 10:15:37 +00:00
|
|
|
self.assertEqual(self.circular_list.index, 2) # Since it's circular, it goes to the end
|
|
|
|
|
|
|
|
|
|
|
|
class TestScriptFunctions(unittest.TestCase):
|
|
|
|
@patch('kls.subprocess.check_output')
|
|
|
|
def test_kubectl(self, mock_check_output):
|
|
|
|
mock_check_output.return_value = b'pod1\npod2\npod3'
|
2024-05-06 10:26:08 +00:00
|
|
|
result = kls.kubectl('get pods')
|
2024-05-04 10:15:37 +00:00
|
|
|
self.assertEqual(result, ['pod1', 'pod2', 'pod3'])
|
|
|
|
|
|
|
|
|
|
|
|
class TestMenu(unittest.TestCase):
|
|
|
|
def setUp(self):
|
2024-05-04 12:50:46 +00:00
|
|
|
self.rows = ['a', 'b', 'c']
|
2024-05-06 10:26:08 +00:00
|
|
|
self.second_menu = kls.Menu("Test Menu 2", ["option1", "option2", "option3"], 0, 10, 2)
|
|
|
|
self.third_menu = kls.Menu("Test Menu 3", ["option1", "option2", "option3"], 0, 10, 2)
|
|
|
|
self.menu = kls.Menu('Test', self.rows, 0, 10, 2)
|
2024-05-04 10:15:37 +00:00
|
|
|
os.system("ln -s kls kls.py")
|
|
|
|
|
2024-05-04 12:50:46 +00:00
|
|
|
def test_menu(self):
|
|
|
|
self.assertEqual(self.menu.title, 'Test')
|
2024-05-04 10:15:37 +00:00
|
|
|
self.assertEqual(self.menu.filtered_rows.elements, self.rows)
|
2024-05-04 12:50:46 +00:00
|
|
|
self.assertEqual(self.menu.visible_rows(), ['a', 'b'])
|
|
|
|
self.assertEqual(self.menu.selected_row(), 'a')
|
2024-05-04 10:15:37 +00:00
|
|
|
|
|
|
|
def test_filter_rows_with_filter(self):
|
|
|
|
# Apply a filter and test
|
2024-05-04 12:50:46 +00:00
|
|
|
self.menu.filter = 'a'
|
2024-05-06 10:26:08 +00:00
|
|
|
self.menu.filtered_rows = kls.CircularList([x for x in self.menu.rows if self.menu.filter in x])
|
2024-05-04 12:50:46 +00:00
|
|
|
self.assertEqual(self.menu.filtered_rows.elements, ['a'])
|
2024-05-04 10:15:37 +00:00
|
|
|
|
|
|
|
def test_filter_rows_with_nonexistent_filter(self):
|
|
|
|
# Apply a filter that matches no rows
|
|
|
|
self.menu.filter = 'nonexistent'
|
2024-05-06 10:26:08 +00:00
|
|
|
self.menu.filtered_rows = kls.CircularList([x for x in self.menu.rows if self.menu.filter in x])
|
2024-05-04 10:15:37 +00:00
|
|
|
self.assertEqual(self.menu.filtered_rows.elements, [])
|
|
|
|
|
2024-05-06 10:26:08 +00:00
|
|
|
def test_vertical_navigation(self):
|
|
|
|
kls.selected_menu = self.menu
|
|
|
|
# global menus
|
|
|
|
kls.menus = [self.menu, self.second_menu, self.third_menu] # Add the menu to the list of menus
|
|
|
|
# Test moving down one row
|
|
|
|
kls.handle_vertical_navigation("KEY_DOWN", self.menu)
|
|
|
|
self.assertEqual(self.menu.visible_row_index, 0)
|
|
|
|
|
|
|
|
# Test moving up one row
|
|
|
|
kls.handle_vertical_navigation("KEY_UP", self.menu)
|
|
|
|
self.assertEqual(self.menu.visible_row_index, 0)
|
|
|
|
|
|
|
|
# Test moving to the next page
|
|
|
|
kls.handle_vertical_navigation("KEY_NPAGE", self.menu)
|
|
|
|
self.assertEqual(self.menu.visible_row_index, 0)
|
|
|
|
|
|
|
|
# Test moving to the previous page
|
|
|
|
kls.handle_vertical_navigation("KEY_PPAGE", self.menu)
|
|
|
|
self.assertEqual(self.menu.visible_row_index, 0)
|
|
|
|
|
|
|
|
# Test moving to the first row
|
|
|
|
kls.handle_vertical_navigation("KEY_HOME", self.menu)
|
|
|
|
self.assertEqual(self.menu.visible_row_index, 0)
|
|
|
|
|
|
|
|
# Test moving to the last row
|
|
|
|
kls.handle_vertical_navigation("KEY_END", self.menu)
|
|
|
|
self.assertEqual(self.menu.visible_row_index, -1)
|
|
|
|
|
2024-05-04 10:15:37 +00:00
|
|
|
def tearDown(self):
|
|
|
|
# Remove the symlink after each test
|
|
|
|
os.unlink('kls.py')
|
|
|
|
os.system("reset")
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
unittest.main()
|