def test_superseded(self): """Tests successfully calling the recipe details view for superseded recipes.""" graph1 = RecipeGraph() graph1.add_job('kml', self.job_type1.name, self.job_type1.version) graph2 = RecipeGraph() graph2.add_job('kml', self.job_type1.name, self.job_type1.version) delta = RecipeGraphDelta(graph1, graph2) superseded_jobs = { recipe_job.job_name: recipe_job.job for recipe_job in self.recipe1_jobs } new_recipe = recipe_test_utils.create_recipe_handler( recipe_type=self.recipe_type, superseded_recipe=self.recipe1, delta=delta, superseded_jobs=superseded_jobs).recipe # Make sure the original recipe was updated url = rest_util.get_url('/recipes/%i/' % self.recipe1.id) response = self.client.generic('GET', url) self.assertEqual(response.status_code, status.HTTP_200_OK, response.content) result = json.loads(response.content) self.assertTrue(result['is_superseded']) self.assertIsNone(result['root_superseded_recipe']) self.assertIsNotNone(result['superseded_by_recipe']) self.assertEqual(result['superseded_by_recipe']['id'], new_recipe.id) self.assertIsNotNone(result['superseded']) self.assertEqual(len(result['jobs']), 1) for recipe_job in result['jobs']: self.assertTrue(recipe_job['is_original']) # Make sure the new recipe has the expected relations url = rest_util.get_url('/recipes/%i/' % new_recipe.id) response = self.client.generic('GET', url) self.assertEqual(response.status_code, status.HTTP_200_OK, response.content) result = json.loads(response.content) self.assertFalse(result['is_superseded']) self.assertIsNotNone(result['root_superseded_recipe']) self.assertEqual(result['root_superseded_recipe']['id'], self.recipe1.id) self.assertIsNotNone(result['superseded_recipe']) self.assertEqual(result['superseded_recipe']['id'], self.recipe1.id) self.assertIsNone(result['superseded']) self.assertEqual(len(result['jobs']), 1) for recipe_job in result['jobs']: self.assertFalse(recipe_job['is_original'])
def setUp(self): django.setup() self.job_type1 = job_test_utils.create_job_type( name='scale-batch-creator') definition = { 'version': '1.0', 'input_data': [{ 'media_types': [ 'image/x-hdf5-image', ], 'type': 'file', 'name': 'input_file', }], 'jobs': [{ 'job_type': { 'name': self.job_type1.name, 'version': self.job_type1.version, }, 'name': 'kml', 'recipe_inputs': [{ 'job_input': 'input_file', 'recipe_input': 'input_file', }], }], } workspace1 = storage_test_utils.create_workspace() file1 = storage_test_utils.create_file(workspace=workspace1) data = { 'version': '1.0', 'input_data': [{ 'name': 'input_file', 'file_id': file1.id, }], 'workspace_id': workspace1.id, } self.recipe_type = recipe_test_utils.create_recipe_type( name='my-type', definition=definition) recipe_handler = recipe_test_utils.create_recipe_handler( recipe_type=self.recipe_type, data=data) self.recipe1 = recipe_handler.recipe self.recipe1_jobs = recipe_handler.recipe_jobs self.recipe2 = recipe_test_utils.create_recipe() self.recipe3 = recipe_test_utils.create_recipe(is_superseded=True)
def setUp(self): django.setup() self.job_type1 = job_test_utils.create_job_type() definition = { 'version': '1.0', 'input_data': [{ 'media_types': [ 'image/x-hdf5-image', ], 'type': 'file', 'name': 'input_file', }], 'jobs': [{ 'job_type': { 'name': self.job_type1.name, 'version': self.job_type1.version, }, 'name': 'kml', 'recipe_inputs': [{ 'job_input': 'input_file', 'recipe_input': 'input_file', }], }], } workspace1 = storage_test_utils.create_workspace() file1 = storage_test_utils.create_file(workspace=workspace1) data = { 'version': '1.0', 'input_data': [{ 'name': 'input_file', 'file_id': file1.id, }], 'workspace_id': workspace1.id, } self.recipe_type = recipe_test_utils.create_recipe_type(name='my-type', definition=definition) recipe_handler = recipe_test_utils.create_recipe_handler(recipe_type=self.recipe_type, data=data) self.recipe1 = recipe_handler.recipe self.recipe1_jobs = recipe_handler.recipe_jobs self.recipe2 = recipe_test_utils.create_recipe() self.recipe3 = recipe_test_utils.create_recipe(is_superseded=True)
def test_superseded(self): """Tests successfully calling the recipe details view for superseded recipes.""" graph1 = RecipeGraph() graph1.add_job('kml', self.job_type1.name, self.job_type1.version) graph2 = RecipeGraph() graph2.add_job('kml', self.job_type1.name, self.job_type1.version) delta = RecipeGraphDelta(graph1, graph2) superseded_jobs = {recipe_job.job_name: recipe_job.job for recipe_job in self.recipe1_jobs} new_recipe = recipe_test_utils.create_recipe_handler( recipe_type=self.recipe_type, superseded_recipe=self.recipe1, delta=delta, superseded_jobs=superseded_jobs ).recipe # Make sure the original recipe was updated url = '/recipes/%i/' % self.recipe1.id response = self.client.generic('GET', url) result = json.loads(response.content) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertTrue(result['is_superseded']) self.assertIsNone(result['root_superseded_recipe']) self.assertIsNotNone(result['superseded_by_recipe']) self.assertEqual(result['superseded_by_recipe']['id'], new_recipe.id) self.assertIsNotNone(result['superseded']) self.assertEqual(len(result['jobs']), 1) for recipe_job in result['jobs']: self.assertTrue(recipe_job['is_original']) # Make sure the new recipe has the expected relations url = '/recipes/%i/' % new_recipe.id response = self.client.generic('GET', url) result = json.loads(response.content) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertFalse(result['is_superseded']) self.assertIsNotNone(result['root_superseded_recipe']) self.assertEqual(result['root_superseded_recipe']['id'], self.recipe1.id) self.assertIsNotNone(result['superseded_recipe']) self.assertEqual(result['superseded_recipe']['id'], self.recipe1.id) self.assertIsNone(result['superseded']) self.assertEqual(len(result['jobs']), 1) for recipe_job in result['jobs']: self.assertFalse(recipe_job['is_original'])
def setUp(self): # Create legacy test files self.f1_file_name = 'legacy_foo.bar' self.f1_last_modified = datetime.datetime(2016, 1, 2, tzinfo=utc) self.f1_source_started = datetime.datetime(2016, 1, 1, tzinfo=utc) self.f1_source_ended = datetime.datetime(2016, 1, 2, tzinfo=utc) self.file1 = storage_test_utils.create_file(file_name=self.f1_file_name, source_started=self.f1_source_started, source_ended=self.f1_source_ended, last_modified=self.f1_last_modified) self.f2_file_name = 'legacy_qaz.bar' self.f2_recipe_input = 'legacy_input_1' self.f2_last_modified = datetime.datetime(2016, 1, 3, tzinfo=utc) self.f2_source_started = datetime.datetime(2016, 1, 2, tzinfo=utc) self.f2_source_ended = datetime.datetime(2016, 1, 3, tzinfo=utc) self.file2 = storage_test_utils.create_file(file_name=self.f2_file_name, source_started=self.f2_source_started, source_ended=self.f2_source_ended, last_modified=self.f2_last_modified) self.job_type1 = job_test_utils.create_job_type() definition = { 'version': '1.0', 'input_data': [{ 'media_types': [ 'image/x-hdf5-image', ], 'type': 'file', 'name': 'input_file', }], 'jobs': [{ 'job_type': { 'name': self.job_type1.name, 'version': self.job_type1.version, }, 'name': 'kml', 'recipe_inputs': [{ 'job_input': 'input_file', 'recipe_input': 'input_file', }], }], } workspace1 = storage_test_utils.create_workspace() data = { 'version': '1.0', 'input_data': [{ 'name': 'input_file', 'file_id': self.file1.id, }, { 'name': self.f2_recipe_input, 'file_id': self.file2.id, }], 'workspace_id': workspace1.id, } self.recipe_type = recipe_test_utils.create_recipe_type(name='my-type', definition=definition) recipe_handler = recipe_test_utils.create_recipe_handler(recipe_type=self.recipe_type, data=data) self.legacy_recipe = recipe_handler.recipe self.recipe = recipe_test_utils.create_recipe() # Create RecipeInputFile entry files self.f3_file_name = 'foo.bar' self.f3_last_modified = datetime.datetime(2016, 1, 11, tzinfo=utc) self.f3_source_started = datetime.datetime(2016, 1, 10, tzinfo=utc) self.f3_source_ended = datetime.datetime(2016, 1, 11, tzinfo=utc) self.file3 = recipe_test_utils.create_input_file(file_name=self.f3_file_name, source_started=self.f3_source_started, source_ended=self.f3_source_ended, recipe=self.recipe, last_modified=self.f3_last_modified) self.f4_file_name = 'qaz.bar' self.f4_recipe_input = 'input_1' self.f4_last_modified = datetime.datetime(2016, 1, 12, tzinfo=utc) self.f4_source_started = datetime.datetime(2016, 1, 11, tzinfo=utc) self.f4_source_ended = datetime.datetime(2016, 1, 12, tzinfo=utc) self.file4 = recipe_test_utils.create_input_file(file_name=self.f4_file_name, source_started=self.f4_source_started, source_ended=self.f4_source_ended, recipe=self.recipe, last_modified=self.f4_last_modified, recipe_input=self.f4_recipe_input)