Coverage for tests/store/test_store_logic.py: 100%

43 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2025-10-17 22:07 +0000

1import unittest 

2from datetime import datetime, timedelta, timezone 

3from webapp.store.logic import ( 

4 convert_date, 

5 format_relative_date, 

6 get_icon, 

7 format_slug, 

8 parse_package_for_card, 

9 paginate, 

10) 

11 

12 

13class TestStoreLogic(unittest.TestCase): 

14 

15 def test_convert_date_today(self): 

16 today = datetime.now(timezone.utc).isoformat() 

17 result = convert_date(today) 

18 self.assertIn(result, ["Today", "Yesterday"]) 

19 

20 def test_format_relative_date_today(self): 

21 now = datetime.now(timezone.utc).isoformat() 

22 self.assertEqual(format_relative_date(now), "today") 

23 

24 def test_format_relative_date_yesterday(self): 

25 yesterday = ( 

26 datetime.now(timezone.utc) - timedelta(days=1) 

27 ).isoformat() 

28 self.assertEqual(format_relative_date(yesterday), "yesterday") 

29 

30 def test_format_relative_date_weeks(self): 

31 old_date = ( 

32 datetime.now(timezone.utc) - timedelta(days=14) 

33 ).isoformat() 

34 self.assertEqual(format_relative_date(old_date), "2 weeks ago") 

35 

36 def test_format_relative_date_months(self): 

37 old_date = ( 

38 datetime.now(timezone.utc) - timedelta(days=60) 

39 ).isoformat() 

40 self.assertEqual(format_relative_date(old_date), "2 months ago") 

41 

42 def test_get_icon_with_icons(self): 

43 media = [{"type": "icon", "url": "https://example.com/icon.png"}] 

44 self.assertEqual(get_icon(media), "https://example.com/icon.png") 

45 

46 def test_format_slug(self): 

47 self.assertEqual( 

48 format_slug("hello-world_iot_and_some_random_text"), 

49 "Hello World IoT and Some Random Text", 

50 ) 

51 

52 def test_parse_package_for_card(self): 

53 package = { 

54 "name": "test-package", 

55 "metadata": { 

56 "summary": "A test summary", 

57 "description": "A test description", 

58 "title": "test-package", 

59 "website": "https://example.com", 

60 "contact": "test@example.com", 

61 "links": { 

62 "media": [ 

63 {"type": "icon", "url": "https://example.com/icon.png"} 

64 ] 

65 }, 

66 "publisher": { 

67 "display-name": "Test Publisher", 

68 "username": "testuser", 

69 "validation": "verified", 

70 }, 

71 }, 

72 } 

73 result = parse_package_for_card(package) 

74 self.assertEqual(result["package"]["name"], "test-package") 

75 self.assertEqual(result["package"]["display_name"], "Test Package") 

76 self.assertEqual( 

77 result["package"]["icon_url"], "https://example.com/icon.png" 

78 ) 

79 self.assertEqual(result["publisher"]["name"], "testuser") 

80 

81 def test_paginate_bounds(self): 

82 packages = [{"name": f"pkg{i}"} for i in range(25)] 

83 page = 2 

84 size = 10 

85 paged = paginate(packages, page, size) 

86 self.assertEqual(len(paged), 10) 

87 self.assertEqual(paged[0]["name"], "pkg10") 

88 

89 def test_paginate_overflow(self): 

90 packages = [{"name": f"pkg{i}"} for i in range(5)] 

91 paged = paginate(packages, page=10, size=2) 

92 self.assertTrue(len(paged) <= 2)