Skip to content

Commit

Permalink
Merge pull request #346 from django-oscar/category_bulk_api
Browse files Browse the repository at this point in the history
Add category bulk admin api
  • Loading branch information
specialunderwear committed May 15, 2024
2 parents 65ae98f + 236f6d5 commit 717850b
Show file tree
Hide file tree
Showing 6 changed files with 374 additions and 2 deletions.
281 changes: 281 additions & 0 deletions oscarapi/tests/unit/testproduct.py
Original file line number Diff line number Diff line change
Expand Up @@ -2135,3 +2135,284 @@ def test_create_or_update_root_category(self):
self.assertEqual(Category.objects.count(), 3)
self.response.assertStatusEqual(201)
self.assertEqual(self.response["description"], "Klakaa")


@skipIf(settings.OSCARAPI_BLOCK_ADMIN_API_ACCESS, "Admin API is not enabled")
class AdminBulkCategoryApiTest(APITest):
def test_create_category_tree(self):
Category.objects.all().delete()
data = [
{
"data": {"code": "henk", "name": "Henk"},
"children": [
{"data": {"code": "klaas", "name": "Klaas"}},
{"data": {"code": "klaas2", "name": "Klaas 2"}},
],
},
{
"data": {
"code": "harrie",
"name": "Harrie",
"description": "Dit is de description",
}
},
]

self.response = self.post("admin-category-bulk", manual_data=data)

self.assertEqual(Category.objects.count(), 4)

self.assertTrue(Category.objects.filter(name="Henk", code="henk").exists())

klaas2 = Category.objects.get(code="klaas2")
self.assertEqual(klaas2.get_parent().code, "henk")
self.assertEqual(klaas2.depth, 2)
self.assertEqual(
Category.dump_bulk(),
[
{
"data": {
"name": "Henk",
"code": "henk",
"description": "",
"meta_title": None,
"meta_description": None,
"image": "",
"slug": "henk",
"is_public": True,
"ancestors_are_public": True,
},
"id": 1,
"children": [
{
"data": {
"name": "Klaas",
"code": "klaas",
"description": "",
"meta_title": None,
"meta_description": None,
"image": "",
"slug": "klaas",
"is_public": True,
"ancestors_are_public": True,
},
"id": 2,
},
{
"data": {
"name": "Klaas 2",
"code": "klaas2",
"description": "",
"meta_title": None,
"meta_description": None,
"image": "",
"slug": "klaas-2",
"is_public": True,
"ancestors_are_public": True,
},
"id": 3,
},
],
},
{
"data": {
"name": "Harrie",
"code": "harrie",
"description": "Dit is de description",
"meta_title": None,
"meta_description": None,
"image": "",
"slug": "harrie",
"is_public": True,
"ancestors_are_public": True,
},
"id": 4,
},
],
)

data = [
{
"data": {"code": "henk", "name": "Henk nieuw"},
"children": [
{"data": {"code": "klaas", "name": "Klaas"}},
],
},
{
"data": {
"code": "harrie",
"name": "Harrie",
"description": "Dit is de description",
}
},
{"data": {"code": "klaas2", "name": "Klaas 2"}},
]

self.response = self.post("admin-category-bulk", manual_data=data)

self.assertTrue(
Category.objects.filter(name="Henk nieuw", code="henk").exists()
)

self.assertEqual(Category.objects.count(), 4)

klaas2.refresh_from_db()
self.assertEqual(klaas2.get_parent(), None)
self.assertEqual(klaas2.depth, 1)

self.assertEqual(
Category.dump_bulk(),
[
{
"data": {
"name": "Henk nieuw",
"code": "henk",
"description": "",
"meta_title": None,
"meta_description": None,
"image": "",
"slug": "henk",
"is_public": True,
"ancestors_are_public": True,
},
"id": 1,
"children": [
{
"data": {
"name": "Klaas",
"code": "klaas",
"description": "",
"meta_title": None,
"meta_description": None,
"image": "",
"slug": "klaas",
"is_public": True,
"ancestors_are_public": True,
},
"id": 2,
}
],
},
{
"data": {
"name": "Harrie",
"code": "harrie",
"description": "Dit is de description",
"meta_title": None,
"meta_description": None,
"image": "",
"slug": "harrie",
"is_public": True,
"ancestors_are_public": True,
},
"id": 4,
},
{
"data": {
"name": "Klaas 2",
"code": "klaas2",
"description": "",
"meta_title": None,
"meta_description": None,
"image": "",
"slug": "klaas-2",
"is_public": True,
"ancestors_are_public": True,
},
"id": 3,
},
],
)

data = [
{
"data": {
"code": "harrie",
"name": "Harrie",
"description": "Dit is de description",
}
},
{
"data": {"code": "henk", "name": "Henk nieuw"},
"children": [
{"data": {"code": "klaas", "name": "Klaas"}},
{"data": {"code": "klaas2", "name": "Klaas 2"}},
],
},
]

self.response = self.post("admin-category-bulk", manual_data=data)

self.assertTrue(
Category.objects.filter(name="Henk nieuw", code="henk").exists()
)

self.assertEqual(Category.objects.count(), 4)

klaas2.refresh_from_db()
self.assertEqual(klaas2.get_parent().code, "henk")
self.assertEqual(klaas2.depth, 2)

self.assertEqual(
Category.dump_bulk(),
[
{
"data": {
"name": "Harrie",
"code": "harrie",
"description": "Dit is de description",
"meta_title": None,
"meta_description": None,
"image": "",
"slug": "harrie",
"is_public": True,
"ancestors_are_public": True,
},
"id": 4,
},
{
"data": {
"name": "Henk nieuw",
"code": "henk",
"description": "",
"meta_title": None,
"meta_description": None,
"image": "",
"slug": "henk",
"is_public": True,
"ancestors_are_public": True,
},
"id": 1,
"children": [
{
"data": {
"name": "Klaas",
"code": "klaas",
"description": "",
"meta_title": None,
"meta_description": None,
"image": "",
"slug": "klaas",
"is_public": True,
"ancestors_are_public": True,
},
"id": 2,
},
{
"data": {
"name": "Klaas 2",
"code": "klaas2",
"description": "",
"meta_title": None,
"meta_description": None,
"image": "",
"slug": "klaas-2",
"is_public": True,
"ancestors_are_public": True,
},
"id": 3,
},
],
},
],
)
14 changes: 12 additions & 2 deletions oscarapi/tests/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,15 @@ def hlogin(self, username, password, session_id):
)
return True

def api_call(self, url_name, method, session_id=None, authenticated=False, **data):
def api_call(
self,
url_name,
method,
session_id=None,
authenticated=False,
manual_data=None,
**data
):
try:
url = reverse(url_name)
except NoReverseMatch:
Expand All @@ -65,7 +73,9 @@ def api_call(self, url_name, method, session_id=None, authenticated=False, **dat
kwargs["HTTP_SESSION_ID"] = "SID:%s:testserver:%s" % (auth_type, session_id)

response = None
if data:
if manual_data is not None:
response = method(url, json.dumps(manual_data), **kwargs)
elif data:
response = method(url, json.dumps(data), **kwargs)
else:
response = method(url, **kwargs)
Expand Down
5 changes: 5 additions & 0 deletions oscarapi/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@
AttributeOptionGroupAdminDetail,
CategoryAdminList,
CategoryAdminDetail,
CategoryBulkAdminApi,
) = get_api_classes(
"views.admin.product",
[
Expand All @@ -127,6 +128,7 @@
"AttributeOptionGroupAdminDetail",
"CategoryAdminList",
"CategoryAdminDetail",
"CategoryBulkAdminApi",
],
)

Expand Down Expand Up @@ -204,6 +206,9 @@
path("ranges/<int:pk>/", RangeDetail.as_view(), name="range-detail"),
path("categories/", CategoryList.as_view(), name="category-list"),
path("categories/<int:pk>/", CategoryDetail.as_view(), name="category-detail"),
path(
"categories-bulk/", CategoryBulkAdminApi.as_view(), name="admin-category-bulk"
),
re_path(
"^categories/(?P<breadcrumbs>.*)/$",
CategoryList.as_view(),
Expand Down
Loading

0 comments on commit 717850b

Please sign in to comment.