33from rest_framework .test import APIClient , APITestCase
44from rest_framework import status
55
6-
7- from data .models import DataSet , Session
6+ from data .models import DataSet , PublishedState , Session
87
98
109class TestSession (APITestCase ):
@@ -117,6 +116,7 @@ def test_session_created(self):
117116 }
118117 ],
119118 "is_public" : True ,
119+ "published_state" : {"published" : False },
120120 }
121121 request = self .auth_client1 .post (
122122 "/v1/data/session/" , data = session , format = "json"
@@ -125,6 +125,7 @@ def test_session_created(self):
125125 new_session = Session .objects .get (id = max_id )
126126 new_dataset = new_session .datasets .get ()
127127 new_metadata = new_dataset .metadata
128+ new_published_state = new_session .published_state
128129 self .assertEqual (request .status_code , status .HTTP_201_CREATED )
129130 self .assertEqual (
130131 request .data ,
@@ -142,6 +143,7 @@ def test_session_created(self):
142143 self .assertEqual (new_session .current_user , self .user1 )
143144 self .assertEqual (new_dataset .current_user , self .user1 )
144145 self .assertTrue (all ([new_session .is_public , new_dataset .is_public ]))
146+ self .assertFalse (new_published_state .published )
145147 new_session .delete ()
146148
147149 # Test creating a private session
@@ -303,6 +305,12 @@ def setUpTestData(cls):
303305 cls .unowned_dataset = DataSet .objects .create (
304306 id = 3 , is_public = True , name = "Unowned Dataset" , session = cls .unowned_session
305307 )
308+ cls .private_published_state = PublishedState .objects .create (
309+ id = 2 ,
310+ session = cls .private_session ,
311+ published = False ,
312+ doi = "http://localhost:8000/v1/data/session/2/" ,
313+ )
306314 cls .auth_client1 = APIClient ()
307315 cls .auth_client2 = APIClient ()
308316 cls .auth_client1 .force_authenticate (cls .user1 )
@@ -320,7 +328,6 @@ def test_get_public_session(self):
320328 "users" : [],
321329 "is_public" : True ,
322330 "title" : "Public Session" ,
323- "published_state" : None ,
324331 "datasets" : [
325332 {
326333 "id" : 1 ,
@@ -333,6 +340,7 @@ def test_get_public_session(self):
333340 "data_contents" : [],
334341 }
335342 ],
343+ "published_state" : None ,
336344 },
337345 )
338346
@@ -348,7 +356,12 @@ def test_get_private_session(self):
348356 "users" : [],
349357 "is_public" : False ,
350358 "title" : "Private Session" ,
351- "published_state" : None ,
359+ "published_state" : {
360+ "id" : 2 ,
361+ "published" : False ,
362+ "doi" : "http://localhost:8000/v1/data/session/2/" ,
363+ "session" : 2 ,
364+ },
352365 "datasets" : [
353366 {
354367 "id" : 2 ,
@@ -421,6 +434,17 @@ def test_update_public_session(self):
421434 session .is_public = False
422435 session .save ()
423436
437+ def test_update_session_new_published_state (self ):
438+ request = self .auth_client1 .put (
439+ "/v1/data/session/1/" ,
440+ data = {"published_state" : {"published" : False }},
441+ format = "json" ,
442+ )
443+ new_published_state = Session .objects .get (id = 1 ).published_state
444+ self .assertEqual (request .status_code , status .HTTP_200_OK )
445+ self .assertFalse (new_published_state .published )
446+ new_published_state .delete ()
447+
424448 # Test that another user's public session cannot be updated
425449 def test_update_public_session_unauthorized (self ):
426450 request1 = self .auth_client2 .put (
@@ -454,6 +478,16 @@ def test_update_private_session(self):
454478 session .is_public = False
455479 session .save ()
456480
481+ def test_update_session_published_state (self ):
482+ request = self .auth_client1 .put (
483+ "/v1/data/session/2/" ,
484+ data = {"published_state" : {"published" : True }},
485+ format = "json" ,
486+ )
487+ self .assertEqual (request .status_code , status .HTTP_200_OK )
488+ self .assertTrue (PublishedState .objects .get (id = 2 ).published )
489+ self .private_published_state .save ()
490+
457491 # Test that another user's private session cannot be updated
458492 def test_update_private_session_unauthorized (self ):
459493 request1 = self .auth_client2 .put (
@@ -485,6 +519,7 @@ def test_delete_private_session(self):
485519 self .assertEqual (request .status_code , status .HTTP_200_OK )
486520 self .assertRaises (Session .DoesNotExist , Session .objects .get , id = 2 )
487521 self .assertRaises (DataSet .DoesNotExist , DataSet .objects .get , id = 2 )
522+ self .assertRaises (PublishedState .DoesNotExist , PublishedState .objects .get , id = 2 )
488523 self .private_session = Session .objects .create (
489524 id = 2 , current_user = self .user1 , title = "Private Session" , is_public = False
490525 )
@@ -494,6 +529,12 @@ def test_delete_private_session(self):
494529 name = "Private Dataset" ,
495530 session = self .private_session ,
496531 )
532+ self .private_published_state = PublishedState .objects .create (
533+ id = 2 ,
534+ session = self .private_session ,
535+ published = False ,
536+ doi = "http://localhost:8000/v1/data/session/2/" ,
537+ )
497538
498539 # Test that another user's private session cannot be deleted
499540 def test_delete_private_session_unauthorized (self ):
0 commit comments