Skip to content

Commit

Permalink
Update tests
Browse files Browse the repository at this point in the history
  • Loading branch information
jochenklar committed Aug 25, 2024
1 parent 66c65d6 commit ebdcb8b
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 4 deletions.
3 changes: 3 additions & 0 deletions rdmo/projects/serializers/v1/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

from rest_framework import serializers

from rdmo.domain.models import Attribute
from rdmo.questions.models import Catalog
from rdmo.services.validators import ProviderValidator

Expand Down Expand Up @@ -371,6 +372,8 @@ class Meta:

class ValueSerializer(serializers.ModelSerializer):

attribute = serializers.PrimaryKeyRelatedField(queryset=Attribute.objects.all(), required=True)

class Meta:
model = Value
fields = (
Expand Down
48 changes: 45 additions & 3 deletions rdmo/projects/tests/test_viewset_project_value.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import json
from pathlib import Path

import pytest
Expand Down Expand Up @@ -30,7 +31,7 @@
'site': [1, 2, 3, 4, 5, 12]
}

add_value_permission_map = change_value_permission_map = delete_value_permission_map = {
add_value_permission_map = change_value_permission_map = delete_value_permission_map = copy_value_permission_map = {
'owner': [1, 2, 3, 4, 5, 12],
'manager': [1, 3, 5],
'author': [1, 3, 5],
Expand Down Expand Up @@ -76,6 +77,7 @@
('phone', '+49 (0) 1337 12345678')
)


@pytest.mark.parametrize('username,password', users)
@pytest.mark.parametrize('project_id', projects)
def test_list(db, client, username, password, project_id):
Expand Down Expand Up @@ -248,10 +250,50 @@ def test_delete(db, client, username, password, value_id):
assert Value.objects.filter(pk=value_id).exists()


@pytest.mark.parametrize('username,password', users)
@pytest.mark.parametrize('value_id, set_values_count', set_values)
def test_copy_set(db, client, username, password, value_id, set_values_count):
client.login(username=username, password=password)
set_value = Value.objects.get(id=value_id)
values_count = Value.objects.count()

url = reverse(urlnames['set'], args=[set_value.project_id, value_id])
data = {
'attribute': set_value.attribute.id,
'set_prefix': set_value.set_prefix,
'set_index': 2,
'text': 'new'
}
response = client.post(url, data=json.dumps(data), content_type="application/json")

if set_value.project_id in copy_value_permission_map.get(username, []):
assert response.status_code == 201
assert len(response.json()) == set_values_count + 1
assert Value.objects.get(
project=set_value.project_id,
snapshot=None,
**data
)
assert Value.objects.count() == values_count + set_values_count + 1 # one is for set/id
for value_data in response.json():
if value_data['set_prefix'] == data['set_prefix']:
assert value_data['set_index'] == data['set_index']
else:
set_prefix_split = value_data['set_prefix'].split('|')
assert set_prefix_split[0] == str(data['set_index'])

elif set_value.project_id in view_value_permission_map.get(username, []):
assert response.status_code == 403
assert Value.objects.count() == values_count
else:
assert response.status_code == 404
assert Value.objects.count() == values_count


@pytest.mark.parametrize('username,password', users)
@pytest.mark.parametrize('project_id', projects)
@pytest.mark.parametrize('value_id,set_values_count', set_values)
def test_set(db, client, username, password, project_id, value_id, set_values_count):
@pytest.mark.parametrize('value_id, set_values_count', set_values)
def test_delete_set(db, client, username, password, project_id, value_id, set_values_count):
client.login(username=username, password=password)
value_exists = Value.objects.filter(project_id=project_id, snapshot=None, id=value_id).exists()
values_count = Value.objects.count()
Expand Down
5 changes: 4 additions & 1 deletion rdmo/projects/viewsets.py
Original file line number Diff line number Diff line change
Expand Up @@ -455,7 +455,10 @@ def copy_set(self, request, parent_lookup_project, pk=None):

# de-serialize the posted new set value and save it, use the ValueSerializer
# instead of ProjectValueSerializer, since the latter does not include project
set_value_serializer = ValueSerializer(data=request.data)
set_value_serializer = ValueSerializer(data={
'project': parent_lookup_project,
**request.data
})
set_value_serializer.is_valid(raise_exception=True)
set_value = set_value_serializer.save()
set_value_data = set_value_serializer.data
Expand Down

0 comments on commit ebdcb8b

Please sign in to comment.