mirror of
				https://github.com/craigerl/aprsd.git
				synced 2025-10-30 20:30:31 -04:00 
			
		
		
		
	This patch adds pre-commit hook support to ensure code passes basic checks prior to allowing a commit.
		
			
				
	
	
		
			119 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # -*- coding: utf-8 -*-
 | |
| import unittest
 | |
| from unittest import mock
 | |
| 
 | |
| import aprsd
 | |
| from aprsd import plugin
 | |
| from aprsd.fuzzyclock import fuzzy
 | |
| 
 | |
| 
 | |
| class TestPlugin(unittest.TestCase):
 | |
|     def setUp(self):
 | |
|         self.fromcall = "KFART"
 | |
|         self.ack = 1
 | |
|         self.config = mock.MagicMock()
 | |
| 
 | |
|     @mock.patch("shutil.which")
 | |
|     def test_fortune_fail(self, mock_which):
 | |
|         fortune_plugin = plugin.FortunePlugin(self.config)
 | |
|         mock_which.return_value = None
 | |
|         message = "fortune"
 | |
|         expected = "Fortune command not installed"
 | |
|         actual = fortune_plugin.run(self.fromcall, message, self.ack)
 | |
|         self.assertEqual(expected, actual)
 | |
| 
 | |
|     @mock.patch("subprocess.Popen")
 | |
|     @mock.patch("shutil.which")
 | |
|     def test_fortune_success(self, mock_which, mock_popen):
 | |
|         fortune_plugin = plugin.FortunePlugin(self.config)
 | |
|         mock_which.return_value = "/usr/bin/games"
 | |
| 
 | |
|         mock_process = mock.MagicMock()
 | |
|         mock_process.communicate.return_value = [b"Funny fortune"]
 | |
|         mock_popen.return_value = mock_process
 | |
| 
 | |
|         message = "fortune"
 | |
|         expected = "Funny fortune"
 | |
|         actual = fortune_plugin.run(self.fromcall, message, self.ack)
 | |
|         self.assertEqual(expected, actual)
 | |
| 
 | |
|     @mock.patch("time.localtime")
 | |
|     def test_time(self, mock_time):
 | |
|         fake_time = mock.MagicMock()
 | |
|         h = fake_time.tm_hour = 16
 | |
|         m = fake_time.tm_min = 12
 | |
|         fake_time.tm_sec = 55
 | |
|         mock_time.return_value = fake_time
 | |
|         time_plugin = plugin.TimePlugin(self.config)
 | |
| 
 | |
|         fromcall = "KFART"
 | |
|         message = "location"
 | |
|         ack = 1
 | |
| 
 | |
|         actual = time_plugin.run(fromcall, message, ack)
 | |
|         self.assertEqual(None, actual)
 | |
| 
 | |
|         cur_time = fuzzy(h, m, 1)
 | |
| 
 | |
|         message = "time"
 | |
|         expected = "{} ({}:{} PDT) ({})".format(
 | |
|             cur_time, str(h), str(m).rjust(2, "0"), message.rstrip()
 | |
|         )
 | |
|         actual = time_plugin.run(fromcall, message, ack)
 | |
|         self.assertEqual(expected, actual)
 | |
| 
 | |
|     @mock.patch("time.localtime")
 | |
|     def test_ping(self, mock_time):
 | |
|         fake_time = mock.MagicMock()
 | |
|         h = fake_time.tm_hour = 16
 | |
|         m = fake_time.tm_min = 12
 | |
|         s = fake_time.tm_sec = 55
 | |
|         mock_time.return_value = fake_time
 | |
| 
 | |
|         ping = plugin.PingPlugin(self.config)
 | |
| 
 | |
|         fromcall = "KFART"
 | |
|         message = "location"
 | |
|         ack = 1
 | |
| 
 | |
|         result = ping.run(fromcall, message, ack)
 | |
|         self.assertEqual(None, result)
 | |
| 
 | |
|         def ping_str(h, m, s):
 | |
|             return (
 | |
|                 "Pong! "
 | |
|                 + str(h).zfill(2)
 | |
|                 + ":"
 | |
|                 + str(m).zfill(2)
 | |
|                 + ":"
 | |
|                 + str(s).zfill(2)
 | |
|             )
 | |
| 
 | |
|         message = "Ping"
 | |
|         actual = ping.run(fromcall, message, ack)
 | |
|         expected = ping_str(h, m, s)
 | |
|         self.assertEqual(expected, actual)
 | |
| 
 | |
|         message = "ping"
 | |
|         actual = ping.run(fromcall, message, ack)
 | |
|         self.assertEqual(expected, actual)
 | |
| 
 | |
|     def test_version(self):
 | |
|         expected = "APRSD version '{}'".format(aprsd.__version__)
 | |
|         version_plugin = plugin.VersionPlugin(self.config)
 | |
| 
 | |
|         fromcall = "KFART"
 | |
|         message = "No"
 | |
|         ack = 1
 | |
| 
 | |
|         actual = version_plugin.run(fromcall, message, ack)
 | |
|         self.assertEqual(None, actual)
 | |
| 
 | |
|         message = "version"
 | |
|         actual = version_plugin.run(fromcall, message, ack)
 | |
|         self.assertEqual(expected, actual)
 | |
| 
 | |
|         message = "Version"
 | |
|         actual = version_plugin.run(fromcall, message, ack)
 | |
|         self.assertEqual(expected, actual)
 |