Changeset View
Changeset View
Standalone View
Standalone View
swh/deposit/tests/api/test_deposit_delete.py
# Copyright (C) 2017-2018 The Software Heritage developers | # Copyright (C) 2017-2018 The Software Heritage developers | ||||
# See the AUTHORS file at the top-level directory of this distribution | # See the AUTHORS file at the top-level directory of this distribution | ||||
# License: GNU General Public License version 3, or any later version | # License: GNU General Public License version 3, or any later version | ||||
# See top-level LICENSE file for more information | # See top-level LICENSE file for more information | ||||
from django.core.urlresolvers import reverse | from django.core.urlresolvers import reverse | ||||
from nose.tools import istest | |||||
from rest_framework import status | from rest_framework import status | ||||
from rest_framework.test import APITestCase | from rest_framework.test import APITestCase | ||||
from swh.deposit.config import EDIT_SE_IRI, EM_IRI, ARCHIVE_KEY, METADATA_KEY | from swh.deposit.config import EDIT_SE_IRI, EM_IRI, ARCHIVE_KEY, METADATA_KEY | ||||
from swh.deposit.config import DEPOSIT_STATUS_DEPOSITED | from swh.deposit.config import DEPOSIT_STATUS_DEPOSITED | ||||
from swh.deposit.models import Deposit, DepositRequest | from swh.deposit.models import Deposit, DepositRequest | ||||
from ..common import BasicTestCase, WithAuthTestCase, CommonCreationRoutine | from ..common import BasicTestCase, WithAuthTestCase, CommonCreationRoutine | ||||
class DepositDeleteTest(APITestCase, WithAuthTestCase, BasicTestCase, | class DepositDeleteTest(APITestCase, WithAuthTestCase, BasicTestCase, | ||||
CommonCreationRoutine): | CommonCreationRoutine): | ||||
@istest | def test_delete_archive_on_partial_deposit_works(self): | ||||
def delete_archive_on_partial_deposit_works(self): | |||||
"""Removing partial deposit's archive should return a 204 response | """Removing partial deposit's archive should return a 204 response | ||||
""" | """ | ||||
# given | # given | ||||
deposit_id = self.create_deposit_partial() | deposit_id = self.create_deposit_partial() | ||||
deposit = Deposit.objects.get(pk=deposit_id) | deposit = Deposit.objects.get(pk=deposit_id) | ||||
deposit_requests = DepositRequest.objects.filter(deposit=deposit) | deposit_requests = DepositRequest.objects.filter(deposit=deposit) | ||||
Show All 15 Lines | def test_delete_archive_on_partial_deposit_works(self): | ||||
deposit = Deposit.objects.get(pk=deposit_id) | deposit = Deposit.objects.get(pk=deposit_id) | ||||
requests = list(DepositRequest.objects.filter(deposit=deposit)) | requests = list(DepositRequest.objects.filter(deposit=deposit)) | ||||
self.assertEquals(len(requests), 2) | self.assertEquals(len(requests), 2) | ||||
self.assertEquals(requests[0].type.name, 'metadata') | self.assertEquals(requests[0].type.name, 'metadata') | ||||
self.assertEquals(requests[1].type.name, 'metadata') | self.assertEquals(requests[1].type.name, 'metadata') | ||||
@istest | def test_delete_archive_on_undefined_deposit_fails(self): | ||||
def delete_archive_on_undefined_deposit_fails(self): | |||||
"""Delete undefined deposit returns a 404 response | """Delete undefined deposit returns a 404 response | ||||
""" | """ | ||||
# when | # when | ||||
update_uri = reverse(EM_IRI, args=[self.collection.name, 999]) | update_uri = reverse(EM_IRI, args=[self.collection.name, 999]) | ||||
response = self.client.delete(update_uri) | response = self.client.delete(update_uri) | ||||
# then | # then | ||||
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) | self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) | ||||
@istest | def test_delete_archive_on_non_partial_deposit_fails(self): | ||||
def delete_archive_on_non_partial_deposit_fails(self): | |||||
"""Delete !partial status deposit should return a 400 response""" | """Delete !partial status deposit should return a 400 response""" | ||||
deposit_id = self.create_deposit_ready() | deposit_id = self.create_deposit_ready() | ||||
deposit = Deposit.objects.get(pk=deposit_id) | deposit = Deposit.objects.get(pk=deposit_id) | ||||
self.assertEquals(deposit.status, DEPOSIT_STATUS_DEPOSITED) | self.assertEquals(deposit.status, DEPOSIT_STATUS_DEPOSITED) | ||||
# when | # when | ||||
update_uri = reverse(EM_IRI, args=[self.collection.name, deposit_id]) | update_uri = reverse(EM_IRI, args=[self.collection.name, deposit_id]) | ||||
response = self.client.delete(update_uri) | response = self.client.delete(update_uri) | ||||
# then | # then | ||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) | self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) | ||||
deposit = Deposit.objects.get(pk=deposit_id) | deposit = Deposit.objects.get(pk=deposit_id) | ||||
self.assertIsNotNone(deposit) | self.assertIsNotNone(deposit) | ||||
@istest | def test_delete_partial_deposit_works(self): | ||||
def delete_partial_deposit_works(self): | |||||
"""Delete deposit should return a 204 response | """Delete deposit should return a 204 response | ||||
""" | """ | ||||
# given | # given | ||||
deposit_id = self.create_simple_deposit_partial() | deposit_id = self.create_simple_deposit_partial() | ||||
deposit = Deposit.objects.get(pk=deposit_id) | deposit = Deposit.objects.get(pk=deposit_id) | ||||
assert deposit.id == deposit_id | assert deposit.id == deposit_id | ||||
# when | # when | ||||
url = reverse(EDIT_SE_IRI, args=[self.collection.name, deposit_id]) | url = reverse(EDIT_SE_IRI, args=[self.collection.name, deposit_id]) | ||||
response = self.client.delete(url) | response = self.client.delete(url) | ||||
# then | # then | ||||
self.assertEqual(response.status_code, | self.assertEqual(response.status_code, | ||||
status.HTTP_204_NO_CONTENT) | status.HTTP_204_NO_CONTENT) | ||||
deposit_requests = list(DepositRequest.objects.filter(deposit=deposit)) | deposit_requests = list(DepositRequest.objects.filter(deposit=deposit)) | ||||
self.assertEquals(deposit_requests, []) | self.assertEquals(deposit_requests, []) | ||||
deposits = list(Deposit.objects.filter(pk=deposit_id)) | deposits = list(Deposit.objects.filter(pk=deposit_id)) | ||||
self.assertEquals(deposits, []) | self.assertEquals(deposits, []) | ||||
@istest | def test_delete_on_edit_se_iri_cannot_delete_non_partial_deposit(self): | ||||
def delete_on_edit_se_iri_cannot_delete_non_partial_deposit(self): | |||||
"""Delete !partial deposit should return a 400 response | """Delete !partial deposit should return a 400 response | ||||
""" | """ | ||||
# given | # given | ||||
deposit_id = self.create_deposit_ready() | deposit_id = self.create_deposit_ready() | ||||
deposit = Deposit.objects.get(pk=deposit_id) | deposit = Deposit.objects.get(pk=deposit_id) | ||||
assert deposit.id == deposit_id | assert deposit.id == deposit_id | ||||
# when | # when | ||||
url = reverse(EDIT_SE_IRI, args=[self.collection.name, deposit_id]) | url = reverse(EDIT_SE_IRI, args=[self.collection.name, deposit_id]) | ||||
response = self.client.delete(url) | response = self.client.delete(url) | ||||
# then | # then | ||||
self.assertEqual(response.status_code, | self.assertEqual(response.status_code, | ||||
status.HTTP_400_BAD_REQUEST) | status.HTTP_400_BAD_REQUEST) | ||||
deposit = Deposit.objects.get(pk=deposit_id) | deposit = Deposit.objects.get(pk=deposit_id) | ||||
self.assertIsNotNone(deposit) | self.assertIsNotNone(deposit) |