def test_add_data_ok(self): # add associated data opener dataopener_name = 'slide opener' DataOpener.objects.create(name=dataopener_name, script=self.script) url = reverse('substrapp:data-list') data = { 'features': self.data_features, 'labels': self.data_labels, 'name': 'liver slide', 'problems': [compute_hash(self.problem_description)], 'data_opener': dataopener_name, 'permissions': 'all' } extra = { 'HTTP_ACCEPT': 'application/json;version=0.0', } response = self.client.post(url, data, format='multipart', **extra) r = response.json() self.assertEqual(r['pkhash'], compute_hash(self.data_features)) self.assertEqual( r['features'], 'http://testserver/media/data/%s/%s' % (r['pkhash'], self.data_features_filename)) self.assertEqual( r['labels'], 'http://testserver/media/data/%s/%s' % (r['pkhash'], self.data_labels_filename)) self.assertEqual(response.status_code, status.HTTP_201_CREATED)
def test_add_learnuplet_ko(self): url = reverse('substrapp:learnuplet-list') data = { 'problem': 'a' * 64, 'train_data': [ '5c1d9cd1c2c1082dde0921b56d11030c81f62fbb51932758b58ac2569dd0b422' ], 'model': '5c1d9cd1c2c1082dde0921b56d11030c81f62fbb51932758b58ac2569dd0a088' } extra = { 'HTTP_ACCEPT': 'application/json;version=0.0', } response = self.client.post(url, data, format='multipart', **extra) r = response.json() self.assertIn('does not exist', r['message']) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) Problem.objects.create(description=self.problem_description, metrics=self.problem_metrics) data = {'problem': compute_hash(self.problem_description)} response = self.client.post(url, data, format='multipart', **extra) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
def test_add_algo_ok(self): # add associated problem Problem.objects.create(description=self.problem_description, metrics=self.problem_metrics) url = reverse('substrapp:algo-list') data = { 'algo': self.script, 'name': 'super top algo', 'problem': compute_hash(self.problem_description), 'permissions': 'all' } extra = { 'HTTP_ACCEPT': 'application/json;version=0.0', } response = self.client.post(url, data, format='multipart', **extra) r = response.json() self.assertEqual(r['pkhash'], compute_hash(self.script)) self.assertEqual(response.status_code, status.HTTP_201_CREATED)
def test_add_algo_ko(self): url = reverse('substrapp:algo-list') # non existing associated problem data = { 'algo': self.script, 'name': 'super top algo', 'problem': 'non existing problem', 'permissions': 'all' } extra = { 'HTTP_ACCEPT': 'application/json;version=0.0', } response = self.client.post(url, data, format='multipart', **extra) r = response.json() self.assertIn('does not exist', r['message']) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) Problem.objects.create(description=self.problem_description, metrics=self.problem_metrics) # missing local storage field data = { 'name': 'super top algo', 'problem': compute_hash(self.problem_description), 'permissions': 'all' } response = self.client.post(url, data, format='multipart', **extra) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) # missing ledger field data = { 'algo': self.script, 'problem': compute_hash(self.problem_description), } response = self.client.post(url, data, format='multipart', **extra) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
def test_add_dataopener_ok(self): url = reverse('substrapp:dataopener-list') data = {'name': 'slide opener', 'script': self.script} extra = { 'HTTP_ACCEPT': 'application/json;version=0.0', } response = self.client.post(url, data, format='multipart', **extra) r = response.json() self.assertEqual(r['pkhash'], compute_hash(self.script)) self.assertEqual( r['script'], 'http://testserver/media/dataopeners/%s/%s' % (r['pkhash'], self.script_filename)) self.assertEqual(response.status_code, status.HTTP_201_CREATED)
def test_add_algo_no_version(self): # add associated problem Problem.objects.create(description=self.problem_description, metrics=self.problem_metrics) url = reverse('substrapp:algo-list') data = { 'algo': self.script, 'name': 'super top algo', 'problem': compute_hash(self.problem_description), 'permissions': 'all' } response = self.client.post(url, data, format='multipart') r = response.json() self.assertEqual(r, {'detail': 'A version is required.'}) self.assertEqual(response.status_code, status.HTTP_406_NOT_ACCEPTABLE)
def test_add_learnuplet_no_version(self): # Add associated problem description, _, metrics, _ = get_sample_problem() Problem.objects.create(description=description, metrics=metrics) # post data url = reverse('substrapp:learnuplet-list') data = { 'problem': compute_hash(description), 'train_data': [ '5c1d9cd1c2c1082dde0921b56d11030c81f62fbb51932758b58ac2569dd0b422' ], 'model': '5c1d9cd1c2c1082dde0921b56d11030c81f62fbb51932758b58ac2569dd0a088' } response = self.client.post(url, data, format='multipart') r = response.json() self.assertEqual(r, {'detail': 'A version is required.'}) self.assertEqual(response.status_code, status.HTTP_406_NOT_ACCEPTABLE)
def test_add_data_no_version(self): # add associated data opener dataopener_name = 'slide opener' DataOpener.objects.create(name=dataopener_name, script=self.script) url = reverse('substrapp:data-list') data = { 'features': self.data_features, 'labels': self.data_labels, 'name': 'liver slide', 'problems': [compute_hash(self.problem_description)], 'data_opener': dataopener_name, 'permissions': 'all' } response = self.client.post(url, data, format='multipart') r = response.json() self.assertEqual(r, {'detail': 'A version is required.'}) self.assertEqual(response.status_code, status.HTTP_406_NOT_ACCEPTABLE)
def test_add_learnuplet_ok(self): # Add associated problem description, _, metrics, _ = get_sample_problem() Problem.objects.create(description=description, metrics=metrics) # post data url = reverse('substrapp:learnuplet-list') data = { 'problem': compute_hash(description), 'train_data': [ '5c1d9cd1c2c1082dde0921b56d11030c81f62fbb51932758b58ac2569dd0b422' ], 'model': '5c1d9cd1c2c1082dde0921b56d11030c81f62fbb51932758b58ac2569dd0a088' } extra = { 'HTTP_ACCEPT': 'application/json;version=0.0', } response = self.client.post(url, data, format='multipart', **extra) self.assertEqual(response.status_code, status.HTTP_201_CREATED)
def test_add_algo_wrong_version(self): # add associated problem Problem.objects.create(description=self.problem_description, metrics=self.problem_metrics) url = reverse('substrapp:algo-list') data = { 'algo': self.script, 'name': 'super top algo', 'problem': compute_hash(self.problem_description), 'permissions': 'all' } extra = { 'HTTP_ACCEPT': 'application/json;version=-1.0', } response = self.client.post(url, data, format='multipart', **extra) r = response.json() self.assertEqual(r, {'detail': 'Invalid version in "Accept" header.'}) self.assertEqual(response.status_code, status.HTTP_406_NOT_ACCEPTABLE)
def test_add_problem_ok(self): url = reverse('substrapp:problem-list') data = { 'name': 'tough problem', 'test_data': [ '5c1d9cd1c2c1082dde0921b56d11030c81f62fbb51932758b58ac2569dd0b379', '5c1d9cd1c2c1082dde0921b56d11030c81f62fbb51932758b58ac2569dd0b389' ], 'description': self.problem_description, 'metrics': self.problem_metrics, } extra = { 'HTTP_ACCEPT': 'application/json;version=0.0', } with mock.patch.object(LedgerProblemSerializer, 'create') as mocked_method: mocked_method.return_value = {}, status.HTTP_201_CREATED response = self.client.post(url, data, format='multipart', **extra) r = response.json() self.assertEqual(r['pkhash'], compute_hash(self.problem_description)) self.assertEqual(r['validated'], False) self.assertEqual( r['description'], 'http://testserver/media/problems/%s/%s' % (r['pkhash'], self.problem_description_filename)) self.assertEqual( r['metrics'], 'http://testserver/media/problems/%s/%s' % (r['pkhash'], self.problem_metrics_filename)) self.assertEqual(response.status_code, status.HTTP_201_CREATED)
def test_add_data_wrong_version(self): # add associated data opener dataopener_name = 'slide opener' DataOpener.objects.create(name=dataopener_name, script=self.script) url = reverse('substrapp:data-list') data = { 'features': self.data_features, 'labels': self.data_labels, 'name': 'liver slide', 'problems': [compute_hash(self.problem_description)], 'data_opener': dataopener_name, 'permissions': 'all' } extra = { 'HTTP_ACCEPT': 'application/json;version=-1.0', } response = self.client.post(url, data, format='multipart', **extra) r = response.json() self.assertEqual(r, {'detail': 'Invalid version in "Accept" header.'}) self.assertEqual(response.status_code, status.HTTP_406_NOT_ACCEPTABLE)
def test_create_data(self): features, _, labels, _ = get_sample_data() data = Data.objects.create(features=features, labels=labels) self.assertEqual(data.pkhash, compute_hash(features)) self.assertFalse(data.validated)
def test_create_data_opener(self): script, _ = get_sample_script() data_opener = DataOpener.objects.create(script=script, name="slides_opener") self.assertEqual(data_opener.pkhash, compute_hash(script))
def test_create_problem(self): description, _, metrics, _ = get_sample_problem() problem = Problem.objects.create(description=description, metrics=metrics) self.assertEqual(problem.pkhash, compute_hash(description)) self.assertFalse(problem.validated)
def test_create_algo(self): script, _ = get_sample_script() algo = Algo.objects.create(algo=script) self.assertEqual(algo.pkhash, compute_hash(script)) self.assertFalse(algo.validated)