def test_collection_musicbrainz_error(self): formdata = "collectionid=55412ad8-1b15-44d5-8dc8-eeeeeeeeeeee&path=%2Fpath%2Fpath" data = QueryDict(formdata) f = forms.AddCollectionForm(data) response = requests.Response() response.status_code = 404 mockerror = mock.Mock( side_effect=forms.compmusic.musicbrainz.requests.HTTPError( response=response)) forms.compmusic.musicbrainz.get_collection_name = mockerror self.assertFalse(f.is_valid()) self.assertTrue("__all__" in f.errors) errormsg = "Cannot find this collection on MusicBrainz" self.assertEqual(errormsg, f.errors["__all__"][0]) response = requests.Response() response.status_code = 503 mockerror = mock.Mock( side_effect=forms.compmusic.musicbrainz.requests.HTTPError( response=response)) forms.compmusic.musicbrainz.get_collection_name = mockerror f = forms.AddCollectionForm(data) self.assertFalse(f.is_valid()) self.assertTrue("__all__" in f.errors) errormsg = "Error connecting to MusicBrainz, try again shortly" self.assertEqual(errormsg, f.errors["__all__"][0])
def index(request): if request.method == 'POST': form = forms.AddCollectionForm(request.POST) if form.is_valid(): # Import collection id coll_id = form.cleaned_data['collectionid'] path = form.cleaned_data['path'] coll_name = form.cleaned_data['collectionname'] do_import = form.cleaned_data['do_import'] checkers = [] for i in form.cleaned_data['checkers']: checkers.append( get_object_or_404(models.CompletenessChecker, pk=int(i))) new_collection = models.Collection.objects.create( id=coll_id, name=coll_name, root_directory=path, do_import=do_import) new_collection.checkers.add(*checkers) docserver.models.Collection.objects.get_or_create( collectionid=coll_id, defaults={ "root_directory": path, "name": coll_name }) jobs.load_and_import_collection(new_collection.id) return HttpResponseRedirect(reverse('dashboard-home')) else: form = forms.AddCollectionForm() collections = models.Collection.objects.all() ret = {'form': form, 'collections': collections} return render(request, 'dashboard/index.html', ret)
def test_collection_musicbrainz_error(self): formdata = "collectionid=55412ad8-1b15-44d5-8dc8-eeeeeeeeeeee&path=%2Fpath%2Fpath" data = QueryDict(formdata) f = forms.AddCollectionForm(data) url = "http://example.com" code = 404 msg = "Not found" hdrs = {} fp = StringIO.StringIO() mockerror = mock.Mock( side_effect=forms.compmusic.musicbrainz.urllib2.HTTPError( url, code, msg, hdrs, fp)) forms.compmusic.musicbrainz.get_collection_name = mockerror self.assertFalse(f.is_valid()) self.assertTrue("__all__" in f.errors) errormsg = "Cannot find this collection on MusicBrainz" self.assertEqual(errormsg, f.errors["__all__"][0]) code = 503 mockerror = mock.Mock( side_effect=forms.compmusic.musicbrainz.urllib2.HTTPError( url, code, msg, hdrs, fp)) forms.compmusic.musicbrainz.get_collection_name = mockerror f = forms.AddCollectionForm(data) self.assertFalse(f.is_valid()) self.assertTrue("__all__" in f.errors) errormsg = "Error connecting to MusicBrainz, try again shortly" self.assertEqual(errormsg, f.errors["__all__"][0])
def test_no_path(self): pathmock = mock.Mock(return_value=False) forms.os.path.exists = pathmock formdata = "collectionid=55412ad8-1b15-44d5-8dc8-9c3cb0cf9e5d&path=%2Fsome%2Fpath" data = QueryDict(formdata) f = forms.AddCollectionForm(data) self.assertFalse(f.is_valid()) self.assertTrue("path" in f.errors) errormsg = "This path doesn't exist" self.assertEqual(errormsg, f.errors["path"][0]) # Now the first path exists but the second doesn't pathmock = mock.Mock(side_effect=[True, False]) forms.os.path.exists = pathmock formdata = "collectionid=55412ad8-1b15-44d5-8dc8-9c3cb0cf9e5d&path=%2Fsome%2Fpath" data = QueryDict(formdata) f = forms.AddCollectionForm(data) self.assertFalse(f.is_valid()) errormsg = "Path doesn't contain inner 'audio'" self.assertEqual(errormsg, f.errors["path"][0])
def addcollection(request): if request.method == 'POST': form = forms.AddCollectionForm(request.POST) if form.is_valid(): # Import collection id coll_id = form.cleaned_data['collectionid'] path = form.cleaned_data['path'] coll_name = form.cleaned_data['collectionname'] do_import = form.cleaned_data['do_import'] dashboard_root = os.path.join(path, models.Collection.AUDIO_DIR) new_collection = models.Collection.objects.create( id=coll_id, name=coll_name, root_directory=dashboard_root, do_import=do_import) docserver_coll, created = docserver.models.Collection.objects.get_or_create( collectionid=coll_id, defaults={"root_directory": path, "name": coll_name}) if not created: docserver_coll.root_directory = path docserver_coll.name = coll_name docserver_coll.save() data_coll, created = data.models.Collection.objects.get_or_create( collectionid=coll_id, defaults={"name": coll_name}) if not created: data_coll.name = coll_name data_coll.save() jobs.force_load_and_import_collection(new_collection.id) return redirect('dashboard-home') else: form = forms.AddCollectionForm() ret = {'form': form} return render(request, 'dashboard/addcollection.html', ret)
def test_collection_bad_uuid(self): formdata = "collectionid=5xxxxxad8-1b15-44d5-8dc8-notauuid&path=%2Fsome%2Fpath" data = QueryDict(formdata) f = forms.AddCollectionForm(data) self.assertFalse(f.is_valid()) self.assertTrue("collectionid" in f.errors) errormsg = "Collection ID needs to be a UUID" self.assertEqual(errormsg, f.errors["collectionid"][0])
def test_valid_form(self): formdata = "collectionid=55412ad8-1b15-44d5-8dc8-9c3cb0cf9e5d&path=%2Fsome%2Fpath" data = QueryDict(formdata) f = forms.AddCollectionForm(data) self.assertTrue(f.is_valid()) self.assertEqual("My collection", f.cleaned_data["collectionname"]) self.mockname.assert_called_once_with( "55412ad8-1b15-44d5-8dc8-9c3cb0cf9e5d") calls = [mock.call("/some/path"), mock.call("/some/path/audio")] self.pathmock.assert_has_calls(calls)
def test_collection_exists(self): models.Collection.objects.create( pk="55412ad8-1b15-44d5-8dc8-eeeeeeeeeeee", name="test collection") formdata = "collectionid=55412ad8-1b15-44d5-8dc8-eeeeeeeeeeee&path=%2Fsome%2Fpath" data = QueryDict(formdata) f = forms.AddCollectionForm(data) self.assertFalse(f.is_valid()) self.assertTrue("collectionid" in f.errors) errormsg = "A collection with this ID already exists" self.assertEqual(errormsg, f.errors["collectionid"][0])