11import pytest
22
3+ import uuid
34import httpretty
45
56from dataverse .connection import Connection
@@ -125,55 +126,57 @@ class TestDatasetOperations(object):
125126 @classmethod
126127 def setup_class (cls ):
127128 print "Connecting to DVN."
128- cls .dvc = Connection (TEST_HOST , TEST_TOKEN )
129-
130- print "Getting Dataverse"
131- dataverses = cls .dvc .get_dataverses ()
132- if not dataverses :
133- raise exceptions .DataverseError (
134- 'You must have a Dataverse to run these tests.'
135- )
129+ cls .connection = Connection (TEST_HOST , TEST_TOKEN )
130+
131+ print "Creating test Dataverse"
132+ cls .alias = str (uuid .uuid1 ())
133+ cls .connection .create_dataverse (
134+ cls .alias ,
135+ 'Test Dataverse' ,
136+ 'dataverse@example.com' ,
137+ )
138+ cls .dataverse = cls .connection .get_dataverse (cls .alias , True )
139+ assert cls .dataverse
136140
137- cls .dv = dataverses [0 ]
141+ @classmethod
142+ def teardown_class (cls ):
138143
139- print "Removing any existing datasets."
140- datasets = cls .dv .get_datasets ()
141- for dataset in datasets :
142- if dataset .get_state () != 'DEACCESSIONED' :
143- cls .dv .delete_dataset (dataset )
144- print 'Dataverse emptied.'
144+ print "Removing test Dataverse"
145+ cls .connection .delete_dataverse (cls .alias )
146+ dataverse = cls .connection .get_dataverse (cls .alias , True )
147+ assert dataverse is None
145148
146149 def setup_method (self , method ):
147150
148151 # create a dataset for each test
149152 s = Dataset (** PICS_OF_CATS_DATASET )
150- self .dv .add_dataset (s )
151- self .s = self .dv .get_dataset_by_doi (s .doi )
153+ self .dataverse .add_dataset (s )
154+ self .dataset = self .dataverse .get_dataset_by_doi (s .doi )
152155
153156 def teardown_method (self , method ):
154157 try :
155- self .dv .delete_dataset (self .s )
158+ self .dataverse .delete_dataset (self .dataset )
156159 finally :
157160 return
158161
159162 def test_create_dataset_from_xml (self ):
160163 new_dataset = Dataset .from_xml_file (ATOM_DATASET )
161- self .dv .add_dataset (new_dataset )
162- retrieved_dataset = self .dv .get_dataset_by_title ("Roasting at Home" )
164+ self .dataverse .add_dataset (new_dataset )
165+ retrieved_dataset = self .dataverse .get_dataset_by_title ("Roasting at Home" )
163166 assert retrieved_dataset
164- self .dv .delete_dataset (retrieved_dataset )
167+ self .dataverse .delete_dataset (retrieved_dataset )
165168
166169 def test_add_files (self ):
167- self .s .add_files (EXAMPLE_FILES )
168- actual_files = [f .name for f in self .s .get_files ()]
170+ self .dataset .add_files (EXAMPLE_FILES )
171+ actual_files = [f .name for f in self .dataset .get_files ()]
169172
170173 assert '__init__.py' in actual_files
171174 assert 'config.py' in actual_files
172175
173176 def test_upload_file (self ):
174- self .s .upload_file ('file.txt' , 'This is a simple text file!' )
175- self .s .upload_file ('file2.txt' , 'This is the second simple text file!' )
176- actual_files = [f .name for f in self .s .get_files ()]
177+ self .dataset .upload_file ('file.txt' , 'This is a simple text file!' )
178+ self .dataset .upload_file ('file2.txt' , 'This is the second simple text file!' )
179+ actual_files = [f .name for f in self .dataset .get_files ()]
177180
178181 assert 'file.txt' in actual_files
179182 assert 'file2.txt' in actual_files
@@ -182,45 +185,45 @@ def test_display_atom_entry(self):
182185 # this just tests we can get an entry back, but does
183186 # not do anything with that xml yet. however, we do use get_entry
184187 # in other methods so this test case is probably covered
185- assert self .s .get_entry ()
188+ assert self .dataset .get_entry ()
186189
187190 def test_display_dataset_statement (self ):
188191 # this just tests we can get an entry back, but does
189192 # not do anything with that xml yet. however, we do use get_statement
190193 # in other methods so this test case is probably covered
191- assert self .s .get_statement ()
194+ assert self .dataset .get_statement ()
192195
193196 def test_delete_a_file (self ):
194- self .s .upload_file ('cat.jpg' , b'Whatever a cat looks like goes here.' )
197+ self .dataset .upload_file ('cat.jpg' , b'Whatever a cat looks like goes here.' )
195198
196199 # Add file and confirm
197- files = self .s .get_files ()
200+ files = self .dataset .get_files ()
198201 assert len (files ) == 1
199202 assert files [0 ].name == 'cat.jpg'
200203
201204 # Delete file and confirm
202- self .s .delete_file (files [0 ])
203- files = self .s .get_files ()
205+ self .dataset .delete_file (files [0 ])
206+ files = self .dataset .get_files ()
204207 assert not files
205208
206209 def test_delete_a_dataset (self ):
207210 xmlDataset = Dataset .from_xml_file (ATOM_DATASET )
208- self .dv .add_dataset (xmlDataset )
209- atomDataset = self .dv .get_dataset_by_title ("Roasting at Home" )
210- num_datasets = len (self .dv .get_datasets ())
211+ self .dataverse .add_dataset (xmlDataset )
212+ atomDataset = self .dataverse .get_dataset_by_title ("Roasting at Home" )
213+ num_datasets = len (self .dataverse .get_datasets ())
211214
212215 assert num_datasets > 0
213- self .dv .delete_dataset (atomDataset )
216+ self .dataverse .delete_dataset (atomDataset )
214217 assert atomDataset .get_state (refresh = True ) == 'DEACCESSIONED'
215- assert len (self .dv .get_datasets ()) == num_datasets - 1
218+ assert len (self .dataverse .get_datasets ()) == num_datasets - 1
216219
217220 @pytest .mark .skipif (True , reason = 'Published datasets can no longer be deaccessioned via API' )
218221 def test_publish_dataset (self ):
219- assert self .s .get_state () == "DRAFT"
220- self .s .publish ()
221- assert self .s .get_state () == "PUBLISHED"
222- self .dv .delete_dataset (self .s )
223- assert self .s .get_state (refresh = True ) == "DEACCESSIONED"
222+ assert self .dataset .get_state () == "DRAFT"
223+ self .dataset .publish ()
224+ assert self .dataset .get_state () == "PUBLISHED"
225+ self .dataverse .delete_dataset (self .dataset )
226+ assert self .dataset .get_state (refresh = True ) == "DEACCESSIONED"
224227
225228
226229if __name__ == '__main__' :
0 commit comments