class DatasetListTest(TestCase): #create two users and one dataset for each user. def setUp(self): self.user1 = User.objects.create_user(username='******', email='*****@*****.**', password='******') self.user2 = User.objects.create_user(username='******', email='*****@*****.**', password='******') self.token1 = Token.objects.get(user=self.user1.id) self.token2 = Token.objects.get(user=self.user2.id) self.client = APIClient() self.url = reverse('api:dataset_list') self.dataset1 = Dataset(name='dataset1', owner=self.user1) self.dataset1.save() self.dataset2 = Dataset(name='dataset2', owner=self.user2) self.dataset2.save() #Test that each user is shown only the dataset that he owns. def test_show_datasets_by_owner(self): self.client.credentials(HTTP_AUTHORIZATION='Token ' + self.token1.key) response = self.client.get(self.url) self.assertEqual(response.data.__len__(), 1) self.assertEqual(response.data[0]['name'], u'dataset1') self.assertEqual(response.data[0]['owner'], u'api_test_user_1') self.assertEqual(response.status_code, status.HTTP_200_OK) #Test that unauthorized gets result in a 401 status code. def test_list_dataset_noauth(self): self.client.credentials() response = self.client.get(self.url) self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
class GetVariableDetail(TestCase): def setUp(self): self.user = User.objects.create_user(username='******', email='*****@*****.**', password='******') self.token = Token.objects.get(user=self.user.id) self.client = APIClient() self.client.credentials(HTTP_AUTHORIZATION='Token ' + self.token.key) self.dataset = Dataset(name='test_set', owner=self.user) self.dataset.save() self.variable = Variable(name='variable', dataset=self.dataset, datatype='string', values=['one', 'two', 'three']) self.variable.save() self.url = reverse('api:variable_by_dataset_detail', kwargs={'dataset_pk': self.dataset.id, 'pk':self.variable.id}) def test_get_variable_detail(self): response = self.client.get(self.url) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data['name'], self.variable.name) self.assertEqual(response.data['dataset'], self.variable.dataset.id) self.assertEqual(response.data['datatype'], self.variable.datatype) self.assertEqual(response.data['values'], self.variable.values) def test_modify_variable(self): data = {'name': 'changed_name', 'dataset':'changed_dataset', 'datatype':'float', 'subtype': 'continuous', 'values':[1, 2 , 3]} response = self.client.put(self.url, data) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data['name'], data['name']) self.assertEqual(response.data['dataset'], self.variable.dataset.id) self.assertEqual(response.data['datatype'], self.variable.datatype) self.assertEqual(response.data['values'], self.variable.values) self.assertEqual(response.data['subtype'], data['subtype']) def test_delete_variable(self): response = self.client.delete(self.url) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
class TwoSampleTTestTest(TestCase): def setUp(self): self.client = APIClient() self.user = User.objects.create_user(username='******', email='*****@*****.**', password='******') self.url = reverse('analysis:two_sample_ttest') self.token = Token.objects.get(user=self.user.id) self.client.credentials(HTTP_AUTHORIZATION='Token ' + self.token.key) #create dataset and variables from test file this_dir = os.getcwd() self.dataset = Dataset(name='test_set', owner=self.user) self.dataset.save() self.variable_ids = [] with open(this_dir + '/analysis/tests/test_files/two_sample_ttest_data.csv') as file_obj: file_obj = read_csv(file_obj, sep=',', header=0) for column in file_obj: (datatype, values) = return_type_and_format_values(file_obj[column]) values = values if values is not None else file_obj[column] datatype = datatype if datatype else 'undefined' subtype = return_default_subtype(datatype) v = Variable(name=column, dataset=self.dataset, datatype=datatype, subtype=subtype, values=values) v.save() self.variable_ids.append(v.id) def test_ttest_wrong_user(self): data = {'dataset': self.dataset.id, 'variable_1': self.variable_ids[0], 'variable_2': self.variable_ids[1]} self.wrong_client = APIClient() self.wrong_user = User.objects.create_user(username='******', email='*****@*****.**', password='******') self.wrong_token = Token.objects.get(user=self.wrong_user.id) self.wrong_client.credentials(HTTP_AUTHORIZATION='Token ' + self.wrong_token.key) response = self.wrong_client.get(self.url, data) self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) def test_ttest_basecase(self): data = {'dataset': self.dataset.id, 'variable_1': self.variable_ids[0], 'variable_2': self.variable_ids[1]} response = self.client.get(self.url, data) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertTrue(response.data['t_value']) self.assertTrue(response.data['p_value']) self.assertTrue(response.data['interpretation']) self.assertTrue(response.data['accept_null']) self.assertTrue(response.data['shapiro_result_1']) self.assertTrue(response.data['shapiro_result_2']) def test_ttest_wrong_datatype(self): v = Variable.objects.get(id=self.variable_ids[0]) v.datatype = 'boolean' v.save() data = {'dataset': self.dataset.id, 'variable_1': self.variable_ids[0], 'variable_2':self.variable_ids[1]} response = self.client.get(self.url, data) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertEqual(response.data['detail'], 'Wrong type variables for t-test') self.assertEqual(response.data.__len__(), 1)
class GetVariableList(TestCase): def setUp(self): self.user = User.objects.create_user(username='******', email='*****@*****.**', password='******') self.token = Token.objects.get(user=self.user.id) self.client = APIClient() self.client.credentials(HTTP_AUTHORIZATION='Token ' + self.token.key) self.dataset = Dataset(name='test_set', owner=self.user) self.dataset.save() self.url = reverse('api:variable_by_dataset_list', kwargs={'dataset_pk': self.dataset.id}) self.variable1 = Variable(name='variable1', dataset=self.dataset, datatype='string', values=['one', 'two', 'three']) self.variable1.save() self.variable2 = Variable(name='variable2', dataset=self.dataset, datatype='integer', values=[1, 2, 3]) self.variable2.save() def test_get_variable_list(self): response = self.client.get(self.url) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data.__len__(), 2)
class GetOrModifyOrDeleteDatasetTest(TestCase): def setUp(self): self.user = User.objects.create_user(username='******', email='*****@*****.**', password='******') self.token = Token.objects.get(user=self.user.id) self.user2 = User.objects.create_user(username='******', email='*****@*****.**', password='******') self.client = APIClient() self.client.credentials(HTTP_AUTHORIZATION='Token ' + self.token.key) self.dataset = Dataset(name='test_set', owner=self.user) self.dataset.save() self.dataset2 = Dataset(name='test_set_2', owner=self.user2) self.dataset2.save() self.url = reverse('api:dataset_detail', kwargs={'pk': self.dataset.id}) self.url2 = reverse('api:dataset_detail', kwargs={'pk': self.dataset2.id}) def test_modify_dataset(self): correct_variable_names = ('string', 'integer', 'float', 'boolean', 'date') this_dir = os.getcwd() with open(this_dir + '/api/tests/test_files/analyzer_test.csv') as test_file: data = {'name': 'changed_name', 'file': test_file} response = self.client.put(self.url, data) #check to see that all fields of the created dataset are correct self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data['name'], u'changed_name') self.assertEqual(response.data['owner'], u'api_test_user') self.assertEqual(response.data['variables'].__len__(), correct_variable_names.__len__()) def test_get_dataset(self): response1 = self.client.get(self.url) response2 = self.client.get(self.url2) self.assertEqual(response1.status_code, status.HTTP_200_OK) self.assertEqual(response2.status_code, status.HTTP_403_FORBIDDEN) self.assertEqual(response1.data['name'], u'test_set') self.assertEqual(response1.data['owner'], u'api_test_user') def test_delete_dataset(self): response = self.client.delete(self.url) self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)