Skip to content

Commit e89b3d6

Browse files
committed
Marketplace tests
1 parent 918c009 commit e89b3d6

1 file changed

Lines changed: 223 additions & 0 deletions

File tree

‎tests/test_marketplace.py‎

Lines changed: 223 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,223 @@
1+
# coding=utf-8
2+
"""
3+
Test cases for Marketplace API client.
4+
"""
5+
6+
import unittest
7+
from unittest.mock import patch
8+
9+
from atlassian.marketplace import MarketPlace
10+
11+
12+
class TestMarketPlace(unittest.TestCase):
13+
"""Test cases for MarketPlace client initialization."""
14+
15+
def setUp(self):
16+
"""Set up test fixtures."""
17+
self.marketplace = MarketPlace(url="https://api.atlassian.com", token="test-token")
18+
19+
def test_init_defaults(self):
20+
"""Test MarketPlace client initialization."""
21+
marketplace = MarketPlace(url="https://api.atlassian.com", token="test-token")
22+
self.assertIsNotNone(marketplace)
23+
24+
25+
class TestMarketPlacePlugins(unittest.TestCase):
26+
"""Test cases for MarketPlace plugin operations."""
27+
28+
def setUp(self):
29+
"""Set up test fixtures."""
30+
self.marketplace = MarketPlace(url="https://api.atlassian.com", token="test-token")
31+
32+
@patch.object(MarketPlace, "get")
33+
def test_get_plugins_info_defaults(self, mock_get):
34+
"""Test get_plugins_info method with default parameters."""
35+
mock_get.return_value = {"plugins": [{"key": "plugin1"}, {"key": "plugin2"}]}
36+
result = self.marketplace.get_plugins_info()
37+
mock_get.assert_called_once_with("rest/1.0/plugins", params={"offset": 10, "limit": 10})
38+
self.assertEqual(len(result), 2)
39+
40+
@patch.object(MarketPlace, "get")
41+
def test_get_plugins_info_custom_params(self, mock_get):
42+
"""Test get_plugins_info method with custom parameters."""
43+
mock_get.return_value = {"plugins": [{"key": "plugin1"}]}
44+
result = self.marketplace.get_plugins_info(limit=5, offset=20)
45+
mock_get.assert_called_once_with("rest/1.0/plugins", params={"offset": 20, "limit": 5})
46+
self.assertEqual(len(result), 1)
47+
48+
@patch.object(MarketPlace, "get")
49+
def test_get_plugins_info_zero_limit(self, mock_get):
50+
"""Test get_plugins_info method with zero limit."""
51+
mock_get.return_value = {"plugins": []}
52+
result = self.marketplace.get_plugins_info(limit=0, offset=0)
53+
mock_get.assert_called_once_with("rest/1.0/plugins", params={})
54+
self.assertEqual(result, [])
55+
56+
@patch.object(MarketPlace, "get")
57+
def test_get_plugins_info_empty_response(self, mock_get):
58+
"""Test get_plugins_info method with empty response."""
59+
mock_get.return_value = {}
60+
result = self.marketplace.get_plugins_info()
61+
self.assertEqual(result, None)
62+
63+
64+
class TestMarketPlaceVendors(unittest.TestCase):
65+
"""Test cases for MarketPlace vendor operations."""
66+
67+
def setUp(self):
68+
"""Set up test fixtures."""
69+
self.marketplace = MarketPlace(url="https://api.atlassian.com", token="test-token")
70+
71+
@patch.object(MarketPlace, "get")
72+
def test_get_vendors_info_defaults(self, mock_get):
73+
"""Test get_vendors_info method with default parameters."""
74+
mock_get.return_value = {"vendors": [{"name": "vendor1"}, {"name": "vendor2"}]}
75+
result = self.marketplace.get_vendors_info()
76+
mock_get.assert_called_once_with("rest/1.0/vendors", params={"offset": 10, "limit": 10})
77+
self.assertEqual(len(result), 2)
78+
79+
@patch.object(MarketPlace, "get")
80+
def test_get_vendors_info_custom_params(self, mock_get):
81+
"""Test get_vendors_info method with custom parameters."""
82+
mock_get.return_value = {"vendors": [{"name": "vendor1"}]}
83+
result = self.marketplace.get_vendors_info(limit=5, offset=20)
84+
mock_get.assert_called_once_with("rest/1.0/vendors", params={"offset": 20, "limit": 5})
85+
self.assertEqual(len(result), 1)
86+
87+
@patch.object(MarketPlace, "get")
88+
def test_get_vendors_info_zero_limit(self, mock_get):
89+
"""Test get_vendors_info method with zero limit."""
90+
mock_get.return_value = {"vendors": []}
91+
result = self.marketplace.get_vendors_info(limit=0, offset=0)
92+
mock_get.assert_called_once_with("rest/1.0/vendors", params={})
93+
self.assertEqual(result, [])
94+
95+
96+
class TestMarketPlaceApplications(unittest.TestCase):
97+
"""Test cases for MarketPlace application operations."""
98+
99+
def setUp(self):
100+
"""Set up test fixtures."""
101+
self.marketplace = MarketPlace(url="https://api.atlassian.com", token="test-token")
102+
103+
@patch.object(MarketPlace, "get")
104+
def test_get_application_info_defaults(self, mock_get):
105+
"""Test get_application_info method with default parameters."""
106+
mock_get.return_value = {
107+
"applications": [
108+
{"key": "confluence", "name": "Confluence"},
109+
{"key": "jira", "name": "Jira"},
110+
]
111+
}
112+
result = self.marketplace.get_application_info()
113+
mock_get.assert_called_once_with("rest/2/applications", params={"offset": 10, "limit": 10})
114+
self.assertEqual(len(result["applications"]), 2)
115+
116+
@patch.object(MarketPlace, "get")
117+
def test_get_application_info_custom_params(self, mock_get):
118+
"""Test get_application_info method with custom parameters."""
119+
mock_get.return_value = {"applications": [{"key": "bitbucket"}]}
120+
result = self.marketplace.get_application_info(limit=5, offset=20)
121+
mock_get.assert_called_once_with("rest/2/applications", params={"offset": 20, "limit": 5})
122+
self.assertEqual(len(result["applications"]), 1)
123+
124+
@patch.object(MarketPlace, "get")
125+
def test_get_application_info_zero_limit(self, mock_get):
126+
"""Test get_application_info method with zero limit (params not included)."""
127+
mock_get.return_value = {"applications": []}
128+
result = self.marketplace.get_application_info(limit=0, offset=0)
129+
mock_get.assert_called_once_with("rest/2/applications", params={})
130+
self.assertEqual(result["applications"], [])
131+
132+
133+
class TestMarketPlaceAppVersions(unittest.TestCase):
134+
"""Test cases for MarketPlace app version operations."""
135+
136+
def setUp(self):
137+
"""Set up test fixtures."""
138+
self.marketplace = MarketPlace(url="https://api.atlassian.com", token="test-token")
139+
140+
@patch.object(MarketPlace, "get")
141+
def test_get_app_versions_no_application(self, mock_get):
142+
"""Test get_app_versions method without application filter."""
143+
mock_get.return_value = [
144+
{"version": "1.0.0", "releaseDate": "2023-01-01"},
145+
{"version": "2.0.0", "releaseDate": "2023-06-01"},
146+
]
147+
add_on_key = "com.atlassian.confluence.plugins.confluence-questions"
148+
result = self.marketplace.get_app_versions(add_on_key)
149+
mock_get.assert_called_once_with(f"rest/2/addons/{add_on_key}/versions", params={})
150+
self.assertEqual(len(result), 2)
151+
152+
@patch.object(MarketPlace, "get")
153+
def test_get_app_versions_with_application(self, mock_get):
154+
"""Test get_app_versions method with application filter."""
155+
mock_get.return_value = [
156+
{"version": "1.0.0", "releaseDate": "2023-01-01"},
157+
]
158+
add_on_key = "com.atlassian.confluence.plugins.confluence-questions"
159+
result = self.marketplace.get_app_versions(add_on_key, application="confluence")
160+
mock_get.assert_called_once_with(f"rest/2/addons/{add_on_key}/versions", params={"application": "confluence"})
161+
self.assertEqual(len(result), 1)
162+
163+
@patch.object(MarketPlace, "get")
164+
def test_get_app_versions_empty_response(self, mock_get):
165+
"""Test get_app_versions method with empty response."""
166+
mock_get.return_value = []
167+
add_on_key = "com.atlassian.jira.plugins.jira-software"
168+
result = self.marketplace.get_app_versions(add_on_key)
169+
self.assertEqual(result, [])
170+
171+
172+
class TestMarketPlaceAppReviews(unittest.TestCase):
173+
"""Test cases for MarketPlace app review operations."""
174+
175+
def setUp(self):
176+
"""Set up test fixtures."""
177+
self.marketplace = MarketPlace(url="https://api.atlassian.com", token="test-token")
178+
179+
@patch.object(MarketPlace, "get")
180+
def test_get_app_reviews_no_sort(self, mock_get):
181+
"""Test get_app_reviews method without sort parameter."""
182+
mock_get.return_value = [
183+
{"author": "user1", "rating": 5, "comment": "Great app!"},
184+
{"author": "user2", "rating": 4, "comment": "Good app"},
185+
]
186+
add_on_key = "com.atlassian.confluence.plugins.confluence-questions"
187+
result = self.marketplace.get_app_reviews(add_on_key)
188+
mock_get.assert_called_once_with(f"rest/2/addons/{add_on_key}/reviews", params={})
189+
self.assertEqual(len(result), 2)
190+
191+
@patch.object(MarketPlace, "get")
192+
def test_get_app_reviews_sort_helpful(self, mock_get):
193+
"""Test get_app_reviews method with helpful sort."""
194+
mock_get.return_value = [
195+
{"author": "user1", "rating": 5, "comment": "Most helpful"},
196+
]
197+
add_on_key = "com.atlassian.confluence.plugins.confluence-questions"
198+
result = self.marketplace.get_app_reviews(add_on_key, sort="helpful")
199+
mock_get.assert_called_once_with(f"rest/2/addons/{add_on_key}/reviews", params={"sort": "helpful"})
200+
self.assertEqual(len(result), 1)
201+
202+
@patch.object(MarketPlace, "get")
203+
def test_get_app_reviews_sort_recent(self, mock_get):
204+
"""Test get_app_reviews method with recent sort."""
205+
mock_get.return_value = [
206+
{"author": "user2", "rating": 4, "comment": "Recent review"},
207+
]
208+
add_on_key = "com.atlassian.confluence.plugins.confluence-questions"
209+
result = self.marketplace.get_app_reviews(add_on_key, sort="recent")
210+
mock_get.assert_called_once_with(f"rest/2/addons/{add_on_key}/reviews", params={"sort": "recent"})
211+
self.assertEqual(len(result), 1)
212+
213+
@patch.object(MarketPlace, "get")
214+
def test_get_app_reviews_empty_response(self, mock_get):
215+
"""Test get_app_reviews method with empty response."""
216+
mock_get.return_value = []
217+
add_on_key = "com.atlassian.jira.plugins.jira-software"
218+
result = self.marketplace.get_app_reviews(add_on_key)
219+
self.assertEqual(result, [])
220+
221+
222+
if __name__ == "__main__":
223+
unittest.main()

0 commit comments

Comments
 (0)