def test_get_ml_job(self): """ Get ML Job works """ data = self.build_ml_job_dataset() # validate jwt tokens work self.login_user() request = self.factory.post(self.ml_run_url, data, HTTP_AUTHORIZATION=self.jwt_auth, format="json") view = MLJobViewSet.as_view({"post": "create"}) response = view(request) self.assertEqual(MLJob.objects.count(), 1) self.assertEqual(MLJobResult.objects.count(), 1) self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.assertEqual(response.data["job"]["user_name"], self.test_username) self.assertEqual(response.data["job"]["title"], data["title"]) job_data = response.data["job"] job_tracking_id = job_data["tracking_id"] job_id = int(job_data["id"]) request = self.factory.get(self.ml_get_url, HTTP_AUTHORIZATION=self.jwt_auth, format="json") view = MLJobViewSet.as_view({"get": "retrieve"}) get_response = view(request, pk=job_id) self.assertEqual(get_response.data["user_name"], self.test_username) self.assertEqual(get_response.data["title"], data["title"]) self.assertEqual(get_response.data["tracking_id"], job_tracking_id)
def test_create_ml_job(self): """ Create an ML Job """ data = self.build_ml_job_dataset() # validate jwt tokens work self.login_user() request = self.factory.post( self.ml_run_url, data, HTTP_AUTHORIZATION=self.jwt_auth, format="json") view = MLJobViewSet.as_view({"post": "create"}) response = view(request) self.assertEqual(MLJob.objects.count(), 1) self.assertEqual(MLJobResult.objects.count(), 1) self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.assertEqual( response.data["job"]["user_name"], self.test_username) self.assertEqual( response.data["job"]["title"], data["title"]) self.assertEqual( len(json.dumps( response.data["results"]["model_json"])) > 0, True) self.assertEqual( len(json.dumps( response.data["results"]["model_weights"])) > 0, True)
def test_not_logged_in_blocked_ml_job_create(self): """ Not Logged in Users cannot - Create an ML Job """ data = self.build_ml_job_dataset() request = self.factory.post(self.ml_run_url, data, format="json") view = MLJobViewSet.as_view({"post": "create"}) response = view(request) self.assertEqual(response.status_code, 401)
def test_get_ml_job_result(self): """ Get ML Job Result works """ data = self.build_ml_job_dataset() # validate jwt tokens work self.login_user() request = self.factory.post( self.ml_run_url, data, HTTP_AUTHORIZATION=self.jwt_auth, format="json") view = MLJobViewSet.as_view({"post": "create"}) response = view(request) self.assertEqual(MLJob.objects.count(), 1) self.assertEqual(MLJobResult.objects.count(), 1) self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.assertEqual( response.data["job"]["user_name"], self.test_username) self.assertEqual( response.data["job"]["title"], data["title"]) job_id = int(response.data["job"]["id"]) result_data = response.data["results"] result_id = int(result_data["id"]) error_data = result_data["error_data"] request = self.factory.get( self.ml_get_result_url, HTTP_AUTHORIZATION=self.jwt_auth, format="json") view = MLJobResultViewSet.as_view({"get": "retrieve"}) get_response = view(request, pk=result_id) print(ppj(get_response.data)) self.assertEqual( get_response.data["user_name"], self.test_username) self.assertEqual( get_response.data["job_id"], job_id) self.assertEqual( get_response.data["id"], result_id) self.assertEqual( get_response.data["error_data"], error_data) self.assertContains( get_response, "model_json") self.assertContains( get_response, "model_weights") self.assertEqual( len(json.dumps(get_response.data["model_json"])) > 0, True) self.assertEqual( len(json.dumps(get_response.data["model_weights"])) > 0, True)
def test_get_recent_ml_jobs(self): """ Get Recent ML Jobs for User """ data = self.build_ml_job_dataset() num_to_create = 30 created_jobs = [] for i in range(0, num_to_create): status = "finished" control_state = "finished" new_obj = MLJob( user=self.test_user, title=data["title"], desc=data["desc"], ds_name=data["ds_name"], algo_name=data["algo_name"], ml_type=data["ml_type"], status=status, control_state=control_state, predict_feature="label_value", training_data={}, pre_proc={}, post_proc={}, meta_data={}, tracking_id="id_{}".format(i), version=data["version"]) new_obj.save() created_jobs.append(new_obj) # end of creating jobs self.login_user() request = self.factory.get( self.ml_get_url, HTTP_AUTHORIZATION=self.jwt_auth, format="json") view = MLJobViewSet.as_view({"get": "list"}) get_response = view(request) self.assertContains(get_response, "jobs") self.assertEqual( len(get_response.data["jobs"]), settings.MAX_RECS_ML_JOB) for idx, response_node in enumerate(get_response.data["jobs"]): db_idx = (len(created_jobs) - idx) - 1 db_node = created_jobs[db_idx] self.assertEqual(response_node["id"], db_node.id) self.assertEqual( response_node["tracking_id"], db_node.tracking_id)
def test_get_ml_job_with_not_found_job_id(self): """ Get ML Job returns 200 but empty data """ # validate jwt tokens work self.login_user() job_id = 777 request = self.factory.get(self.ml_get_url, HTTP_AUTHORIZATION=self.jwt_auth, format="json") view = MLJobViewSet.as_view({"get": "retrieve"}) get_response = view(request, pk=job_id) self.assertEqual(get_response.status_code, status.HTTP_200_OK) self.assertEqual(get_response.data, {})