/
test_serializers.py
executable file
·143 lines (110 loc) · 4.62 KB
/
test_serializers.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
import copy
import datetime
from rest_framework.test import APIRequestFactory
from webapp.apps.users.models import User, Profile, create_profile_from_user
from webapp.apps.comp.models import ANON_BEFORE, PendingPermission
from webapp.apps.comp.serializers import (
InputsSerializer,
SimulationSerializer,
MiniSimulationSerializer,
PendingPermissionSerializer,
)
from .utils import _submit_inputs, _submit_sim
def test_owner_unsigned(db, get_inputs, meta_param_dict):
modeler = User.objects.get(username="modeler").profile
inputs = _submit_inputs("Used-for-testing", get_inputs, meta_param_dict, modeler)
_, submit_sim = _submit_sim(inputs)
sim = submit_sim.submit()
sim.status = "SUCCESS"
sim.save()
# get_owner gives sim owner after ANON_BEFORE
sim.creation_date = ANON_BEFORE + datetime.timedelta(days=2)
sim.save()
assert sim.get_owner() == modeler
data = SimulationSerializer(instance=sim).data
assert data["owner"] == str(modeler)
data = MiniSimulationSerializer(instance=sim).data
assert data["owner"] == str(modeler)
# get_owner gives "unsigned" before ANON_BEFORE
sim.creation_date = ANON_BEFORE - datetime.timedelta(days=2)
sim.save()
assert sim.get_owner() == "unsigned"
data = SimulationSerializer(instance=sim).data
assert data["owner"] == "unsigned"
data = MiniSimulationSerializer(instance=sim).data
assert data["owner"] == "unsigned"
def test_write_access(db, get_inputs, meta_param_dict):
modeler = User.objects.get(username="modeler").profile
inputs = _submit_inputs("Used-for-testing", get_inputs, meta_param_dict, modeler)
_, submit_sim = _submit_sim(inputs)
sim = submit_sim.submit()
sim.status = "SUCCESS"
sim.save()
factory = APIRequestFactory()
req = factory.get("/")
req.user = modeler.user
data = SimulationSerializer(instance=sim).data
assert data["role"] == None
assert "pending_permissions" not in data
assert "access" not in data
data = SimulationSerializer(instance=sim, context={"request": req}).data
assert data["role"] == "admin"
assert "pending_permissions" in data
assert "access" in data
data = InputsSerializer(instance=sim.inputs).data
assert data["role"] == None
data = InputsSerializer(instance=sim.inputs, context={"request": req}).data
assert data["role"] == "admin"
def test_pending_permissions(db, get_inputs, meta_param_dict, profile):
modeler = User.objects.get(username="modeler").profile
inputs = _submit_inputs("Used-for-testing", get_inputs, meta_param_dict, modeler)
_, submit_sim = _submit_sim(inputs)
sim = submit_sim.submit()
sim.status = "SUCCESS"
sim.is_public = True
sim.save()
factory = APIRequestFactory()
req = factory.get("/")
req.user = profile.user
data = SimulationSerializer(instance=sim, context={"request": req}).data
assert data["role"] == None
assert "pending_permissions" not in data
assert "access" not in data
pp, _ = PendingPermission.objects.get_or_create(
sim=sim, profile=profile, permission_name="add_author"
)
data = SimulationSerializer(instance=sim, context={"request": req}).data
assert data["role"] == "read"
assert (
data["pending_permissions"]
== PendingPermissionSerializer(instance=[pp], many=True).data
)
assert "access" not in data
def test_authors_sorted_alphabetically(db, get_inputs, meta_param_dict):
modeler = User.objects.get(username="modeler").profile
inputs = _submit_inputs("Used-for-testing", get_inputs, meta_param_dict, modeler)
_, submit_sim = _submit_sim(inputs)
sim = submit_sim.submit()
sim.status = "SUCCESS"
sim.is_public = True
sim.save()
factory = APIRequestFactory()
req = factory.get("/")
req.user = modeler.user
u = User.objects.create_user("aaaa", "aaaa@example.com", "heyhey2222")
create_profile_from_user(u)
profile = Profile.objects.get(user__username="aaaa")
pp, created = PendingPermission.objects.get_or_create(
sim=sim, profile=profile, permission_name="add_author"
)
assert created
pp.add_author()
data = SimulationSerializer(instance=sim, context={"request": req}).data
data2 = copy.deepcopy(data)
assert sorted(data2["authors"]) == data["authors"]
data = SimulationSerializer(instance=sim, context={"request": req}).data
data2 = copy.deepcopy(data)
assert sorted(data2["authors"]) == data["authors"]
data = InputsSerializer(instance=sim.inputs, context={"request": req}).data
data2 = copy.deepcopy(data)
assert sorted(data2["sim"]["authors"]) == data["sim"]["authors"]