diff --git a/atdb/taskdatabase/models.py b/atdb/taskdatabase/models.py index b69426a659aead5e759977d6c50337b1c1273f23..dc4511d4f732946528fdb3ace87554c9c00a5b15 100644 --- a/atdb/taskdatabase/models.py +++ b/atdb/taskdatabase/models.py @@ -99,7 +99,7 @@ class Task(models.Model): quality = models.CharField(max_length=10,blank=True, null=True) calculated_qualities = models.JSONField(null=True, blank=True) resume = models.BooleanField(verbose_name="Resume", default=True) - creationTime = models.DateTimeField(verbose_name="CreationTime",default=datetime.utcnow, blank=True) + creationTime = models.DateTimeField(verbose_name="CreationTime",default=timezone.now, blank=True) priority = models.IntegerField(default=100, null=True) purge_policy = models.CharField(max_length=5, default="no", blank=True, null=True) @@ -336,7 +336,7 @@ class LogEntry(models.Model): class Status(models.Model): name = models.CharField(max_length=50, default="unknown") - timestamp = models.DateTimeField(default=datetime.utcnow, blank=True) + timestamp = models.DateTimeField(default=timezone.now, blank=True) # relationships task = models.ForeignKey(Task, related_name='status_history', on_delete=models.CASCADE, null=False) diff --git a/atdb/taskdatabase/test_calculated_qualities.py b/atdb/taskdatabase/test_calculated_qualities.py deleted file mode 100644 index b2b5bfa596460ea9019df750e49925a4586c7c1a..0000000000000000000000000000000000000000 --- a/atdb/taskdatabase/test_calculated_qualities.py +++ /dev/null @@ -1,373 +0,0 @@ -from django.test import TestCase -import json - -from taskdatabase.services import calculated_qualities as qualities -from taskdatabase.models import Configuration, Task - - -class TestCalculatedQualities(TestCase): - - @classmethod - def setUpTestData(cls): - print("setUpTestData: Run once to set up non-modified data for all class methods.") - # Set up non-modified objects used by all test methods - quality_thresholds = { - "moderate": 20, - "poor": 50, - "overall_poor": 50, - "overall_good": 90, - } - Configuration.objects.create(key="quality_thresholds", value=json.dumps(quality_thresholds)) - - def setUp(self): - print("setUp: Run once for every test method to setup clean data.") - - outputs0 = { - "quality": { - "details": {}, - "observing-conditions": "N/A", - "sensitivity": "N/A", - "summary": { - "L526107_summaryIS.tar": { - "added": [], - "deleted": [], - "input_name": "L526107_summaryIS.tar", - "input_size": 495749120, - "input_size_str": "472.78 MB", - "output_name": "L526107_summaryIS.tar", - "output_size": 283791360, - "output_size_str": "270.64 MB", - "rfi_percent": 0, - "size_ratio": 0.5724495486749427 - } - }, - "uv-coverage": "N/A" - }, - } - - outputs1 = { - "quality": { - "details": {}, - "observing-conditions": "N/A", - "sensitivity": "N/A", - "summary": { - "L526107_SAP002_B073_P000_bf.tar": { - "added": [ - "stokes/SAP2/BEAM73/L526105_SAP2_BEAM73_2bit.fits", - "stokes/SAP2/BEAM73/L526105_SAP2_BEAM73_2bit_ldv_psrfits_requantisation.log" - ], - "deleted": [ - "stokes/SAP2/BEAM73/L526105_SAP2_BEAM73.fits" - ], - "input_name": "L526107_SAP002_B073_P000_bf.tar", - "input_size": 20353853440, - "input_size_str": "18.96 GB", - "output_name": "L526107_SAP002_B073_P000_bf.tar", - "output_size": 6024990720, - "output_size_str": "5.61 GB", - "rfi_percent": 11.167, - "size_ratio": 0.2960122876860019 - } - }, - "uv-coverage": "N/A" - }, - } - - outputs2 = { - "quality": { - "details": {}, - "observing-conditions": "N/A", - "sensitivity": "N/A", - "summary": { - "L526107_SAP002_B073_P000_bf.tar": { - "added": [ - "stokes/SAP2/BEAM73/L526105_SAP2_BEAM73_2bit.fits", - "stokes/SAP2/BEAM73/L526105_SAP2_BEAM73_2bit_ldv_psrfits_requantisation.log" - ], - "deleted": [ - "stokes/SAP2/BEAM73/L526105_SAP2_BEAM73.fits" - ], - "input_name": "L526107_SAP002_B073_P000_bf.tar", - "input_size": 20353853440, - "input_size_str": "18.96 GB", - "output_name": "L526107_SAP002_B073_P000_bf.tar", - "output_size": 6024990720, - "output_size_str": "5.61 GB", - "rfi_percent": 22.167, - "size_ratio": 0.2960122876860019 - } - }, - "uv-coverage": "N/A" - }, - } - - outputs3 = { - "quality": { - "details": {}, - "observing-conditions": "N/A", - "sensitivity": "N/A", - "summary": { - "L526107_SAP002_B072_P000_bf.tar": { - "added": [ - "stokes/SAP2/BEAM72/L526105_SAP2_BEAM72_2bit.fits", - "stokes/SAP2/BEAM72/L526105_SAP2_BEAM72_2bit_ldv_psrfits_requantisation.log" - ], - "deleted": [ - "stokes/SAP2/BEAM72/L526105_SAP2_BEAM72.fits" - ], - "input_name": "L526107_SAP002_B072_P000_bf.tar", - "input_size": 20353843200, - "input_size_str": "18.96 GB", - "output_name": "L526107_SAP002_B072_P000_bf.tar", - "output_size": 6024980480, - "output_size_str": "5.61 GB", - "rfi_percent": 31.921, - "size_ratio": 0.2960119335104242 - } - }, - "uv-coverage": "N/A" - }, - - } - - outputs4 = { - "quality": { - "details": {}, - "observing-conditions": "N/A", - "sensitivity": "N/A", - "summary": { - "L526107_SAP002_B070_P000_bf.tar": { - "added": [ - "stokes/SAP2/BEAM70/L526105_SAP2_BEAM70_2bit.fits", - "stokes/SAP2/BEAM70/L526105_SAP2_BEAM70_2bit_ldv_psrfits_requantisation.log" - ], - "deleted": [ - "stokes/SAP2/BEAM70/L526105_SAP2_BEAM70.fits" - ], - "input_name": "L526107_SAP002_B070_P000_bf.tar", - "input_size": 20353525760, - "input_size_str": "18.96 GB", - "output_name": "L526107_SAP002_B070_P000_bf.tar", - "output_size": 6024755200, - "output_size_str": "5.61 GB", - "rfi_percent": 52.164, - "size_ratio": 0.2960054818531843 - } - }, - "uv-coverage": "N/A" - }, - } - - outputs5 = { - "quality": { - "details": {}, - "observing-conditions": "N/A", - "sensitivity": "N/A", - "summary": { - "L526107_SAP002_B072_P000_bf.tar": { - "added": [ - "stokes/SAP2/BEAM72/L526105_SAP2_BEAM72_2bit.fits", - "stokes/SAP2/BEAM72/L526105_SAP2_BEAM72_2bit_ldv_psrfits_requantisation.log" - ], - "deleted": [ - "stokes/SAP2/BEAM72/L526105_SAP2_BEAM72.fits" - ], - "input_name": "L526107_SAP002_B072_P000_bf.tar", - "input_size": 20353843200, - "input_size_str": "18.96 GB", - "output_name": "L526107_SAP002_B072_P000_bf.tar", - "output_size": 6024980480, - "output_size_str": "5.61 GB", - "size_ratio": 0.2960119335104242 - } - }, - "uv-coverage": "N/A" - }, - - } - - outputs6 = { - "quality": { - "details": {}, - "observing-conditions": "N/A", - "sensitivity": "N/A", - "summary": { - "L526107_SAP002_B070_P000_bf.tar": { - "added": [ - "stokes/SAP2/BEAM70/L526105_SAP2_BEAM70_2bit.fits", - "stokes/SAP2/BEAM70/L526105_SAP2_BEAM70_2bit_ldv_psrfits_requantisation.log" - ], - "deleted": [ - "stokes/SAP2/BEAM70/L526105_SAP2_BEAM70.fits" - ], - "input_name": "L526107_SAP002_B070_P000_bf.tar", - "input_size": 20353525760, - "input_size_str": "18.96 GB", - "output_name": "L526107_SAP002_B070_P000_bf.tar", - "output_size": 6024755200, - "output_size_str": "5.61 GB", - "size_ratio": 0.2960054818531843 - } - }, - "uv-coverage": "N/A" - }, - } - - # create a list of Tasks with various values of rfi_percent to test the quality algorithms - # rfi_percent=0, this task should not be included in the calculates - Task.objects.get_or_create(sas_id=54321, status='processed', outputs=outputs0) - - # rfi_percent 11,22,31,52 - Task.objects.get_or_create(sas_id=54321, status='processed', outputs=outputs1) - Task.objects.get_or_create(sas_id=54321, status='processed', outputs=outputs2) - Task.objects.get_or_create(sas_id=54321, status='processed', outputs=outputs3) - Task.objects.get_or_create(sas_id=54321, status='processed', outputs=outputs4) - - # tasks without rfi_percent (so simulating a different pipeline) - Task.objects.get_or_create(sas_id=12345, status='processed', outputs=outputs5) - Task.objects.get_or_create(sas_id=12345, status='processed', outputs=outputs6) - - def test_count_tasks(self): - actual = Task.objects - count = actual.count() - self.assertEqual(count,7) - - def test_run_calculations_when_task_becomes_stored(self): - for task in Task.objects.all(): - task.new_status = 'stored' - # this triggers the overridden save function in models.task - task.save() - - # only 4 of the 7 tasks should now have calculated_qualities - count = 0 - for task in Task.objects.all(): - if task.calculated_qualities['per_sasid']: - count += 1 - - self.assertEqual(count,4) - - - def test_calculated_qualities(self): - """ - calculate the quality per task and per sas_id based on rfi_percent values - The threshold values are written from a configuration jsonfield - - Using this algorithm from SDCO: - rfi_i <= 20 % is good - 20% <= rfi_i <= 50 is moderate - rfi_i > 50 is poor. - except when rfi_percent = 0 - - Using this algorithm from SDCO: - if more then 90 % of all files have a good quality then the dataset has good condition. - If more then 50 % of all files have a poor quality then the dataset is poor - otherwise is moderate. - """ - - # read the quality thresholds from the test database - quality_thresholds = json.loads(Configuration.objects.get(key="quality_thresholds").value) - - # get the tasks for sas_id 54321 - tasks_for_this_sasid = Task.objects.filter(sas_id=54321) - - # run the algorithms and gather the values - quality_values = {'poor': 0, 'moderate': 0, 'good': 0} - - for task in tasks_for_this_sasid: - q = qualities.calculate_qualities(task, tasks_for_this_sasid, quality_thresholds) - try: - key = task.calculated_qualities['per_task'] - quality_values[key] = quality_values[key] + 1 - quality_per_sasid = task.calculated_qualities['per_sasid'] - except: - # ignore the tasks that have no calculated quality. - pass - - self.assertEqual(quality_values,{'poor': 1, 'moderate': 2, 'good': 1}) - - # not 90% = good, and not >50% = poor so 'moderate' - self.assertEqual(quality_per_sasid,'moderate') - - - def test_calculated_qualities_with_optimistic_thresholds(self): - """ - calculate the quality per task and per sas_id based on rfi_percent values - The threshold values are extremely optimistic, simulating changes made by the user - - Using this algorithm from SDCO: - rfi_i <= 50 % is good - 50% <= rfi_i <= 90 is moderate - rfi_i > 90 is poor. - except when rfi_percent = 0 - - Using this algorithm from SDCO: - if more then 50 % of all files have a good quality then the dataset has good condition. - If more then 10 % of all files have a poor quality then the dataset is poor - otherwise is moderate. - - """ - - # optimistic thresholds, poor data doesn't exist - quality_thresholds = { - "moderate": 50, - "poor": 90, - "overall_poor": 10, - "overall_good": 50, - } - - # get the tasks for sas_id 54321 - tasks_for_this_sasid = Task.objects.filter(sas_id=54321) - - # run the algorithms and gather the values - quality_values = {'poor': 0, 'moderate': 0, 'good': 0} - - for task in tasks_for_this_sasid: - q = qualities.calculate_qualities(task, tasks_for_this_sasid, quality_thresholds) - try: - key = task.calculated_qualities['per_task'] - quality_values[key] = quality_values[key] + 1 - quality_per_sasid = task.calculated_qualities['per_sasid'] - except: - # ignore the tasks that have no calculated quality. - pass - - # rfi_percentages are 11,22,31,52 for the tasks of this sasid - # with the optimistic parameters that means that the first 3 are 'good', and last one is moderate. No poor - self.assertEqual(quality_values,{'poor': 0, 'moderate': 1, 'good': 3}) - - # 3 out of 4 are 'good', 75% is above the 50% threshold, so 'good' - self.assertEqual(quality_per_sasid,'good') - - def test_faulty_thresholds(self): - """ - what happens if the user makes a typo in the threshold? - """ - - # faulty thresholds - quality_thresholds = { - "moderate": "a", - "poor": 50, - "overall_poor": 50, - "overall_good": 90, - } - - # get the tasks for sas_id 54321 - tasks_for_this_sasid = Task.objects.filter(sas_id=54321) - - # run the algorithms and gather the values - quality_values = {'poor': 0, 'moderate': 0, 'good': 0} - quality_per_sasid = None - - for task in tasks_for_this_sasid: - q = qualities.calculate_qualities(task, tasks_for_this_sasid, quality_thresholds) - try: - key = task.calculated_qualities['per_task'] - quality_values[key] = quality_values[key] + 1 - quality_per_sasid = task.calculated_qualities['per_sasid'] - except: - # ignore the tasks that have no calculated quality. - pass - - self.assertEqual(quality_values, {'poor': 0, 'moderate': 0, 'good': 0}) - self.assertEqual(quality_per_sasid, None) - diff --git a/atdb/taskdatabase/tests/test_quality_page.py b/atdb/taskdatabase/tests/test_quality_page.py new file mode 100644 index 0000000000000000000000000000000000000000..6e96526abd442729e77c8551e0acc4dfdb1d9e9b --- /dev/null +++ b/atdb/taskdatabase/tests/test_quality_page.py @@ -0,0 +1,33 @@ +from django.test import TestCase +from django.urls import reverse + +from taskdatabase.models import Task, Workflow + + +class QualityPageViewTest(TestCase): + + @classmethod + def setUpTestData(cls): + + # Set up non-modified objects used by all test methods + workflow = Workflow() + workflow.save() + + # create a list of Tasks + Task.objects.get_or_create(sas_id=12345, workflow = workflow) + Task.objects.get_or_create(sas_id=12345, workflow = workflow) + Task.objects.get_or_create(sas_id=12345, workflow = workflow) + + def test_url_exists_at_desired_location(self): + response = self.client.get('/atdb/quality') + self.assertEqual(response.status_code, 200) + + def test_url_accessible_by_name(self): + response = self.client.get(reverse('quality')) + self.assertEqual(response.status_code, 200) + + def test_uses_correct_template(self): + response = self.client.get(reverse('quality')) + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'taskdatabase/quality/page.html') + diff --git a/atdb/taskdatabase/tests/test_views_config_page.py b/atdb/taskdatabase/tests/test_views_config_page.py new file mode 100644 index 0000000000000000000000000000000000000000..644264c80f017286b8d5d97a991f7579f6ce40bb --- /dev/null +++ b/atdb/taskdatabase/tests/test_views_config_page.py @@ -0,0 +1,30 @@ +from django.test import TestCase +from django.urls import reverse + +from taskdatabase.models import Task, Workflow +class ConfigPageViewTest(TestCase): + + @classmethod + def setUpTestData(cls): + + # Set up non-modified objects used by all test methods + workflow = Workflow() + workflow.save() + + # create a list of Tasks + Task.objects.get_or_create(sas_id=12345, status='finished', workflow = workflow) + Task.objects.get_or_create(sas_id=12345, status='finished', workflow = workflow) + Task.objects.get_or_create(sas_id=12345, status='stored', workflow = workflow) + + def test_url_exists_at_desired_location(self): + response = self.client.get('/atdb/config/') + self.assertEqual(response.status_code, 200) + + def test_url_accessible_by_name(self): + response = self.client.get(reverse('config')) + self.assertEqual(response.status_code, 200) + + def test_uses_correct_template(self): + response = self.client.get(reverse('config')) + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'taskdatabase/config.html') \ No newline at end of file diff --git a/atdb/taskdatabase/tests/test_views_dashboard_page.py b/atdb/taskdatabase/tests/test_views_dashboard_page.py new file mode 100644 index 0000000000000000000000000000000000000000..516aad224817974767fc0217e1e898c67fc02ee9 --- /dev/null +++ b/atdb/taskdatabase/tests/test_views_dashboard_page.py @@ -0,0 +1,26 @@ +from django.test import TestCase +from django.urls import reverse + +from taskdatabase.models import Task, Workflow +class DashboardPageViewTest(TestCase): + + @classmethod + def setUpTestData(cls): + + # Set up non-modified objects used by all test methods + workflow = Workflow() + workflow.save() + + # create a list of Tasks + Task.objects.get_or_create(sas_id=12345, status='finished', workflow = workflow) + Task.objects.get_or_create(sas_id=12345, status='finished', workflow = workflow) + Task.objects.get_or_create(sas_id=12345, status='stored', workflow = workflow) + + def test_url_exists_at_desired_location(self): + response = self.client.get('/atdb/dashboard/active_nores_nofilter') + self.assertEqual(response.status_code, 200) + + def test_uses_correct_template(self): + response = self.client.get('/atdb/dashboard/active_nores_nofilter') + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'taskdatabase/dashboard/dashboard.html') \ No newline at end of file diff --git a/atdb/taskdatabase/tests/test_views_details_page.py b/atdb/taskdatabase/tests/test_views_details_page.py new file mode 100644 index 0000000000000000000000000000000000000000..fec78527b081ac1c9e5fafca954f2fa2f967e84f --- /dev/null +++ b/atdb/taskdatabase/tests/test_views_details_page.py @@ -0,0 +1,27 @@ +from django.test import TestCase +from django.urls import reverse + +from taskdatabase.models import Task, Workflow +class DetailsPageViewTest(TestCase): + + @classmethod + def setUp(cls): + # Set up non-modified objects used by all test methods + workflow = Workflow() + workflow.save() + + # create a list of Tasks + Task.objects.get_or_create(sas_id=12345, status='finished', workflow=workflow) + + def test_url_exists_at_desired_location(self): + # extract the task + task = Task.objects.all()[0] + response = self.client.get(f'/atdb/task_details/{task.id}/1') + self.assertEqual(response.status_code, 200) + + + def test_uses_correct_template(self): + task = Task.objects.all()[0] + response = self.client.get(f'/atdb/task_details/{task.id}/1') + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'taskdatabase/tasks/task_details.html') \ No newline at end of file diff --git a/atdb/taskdatabase/tests/test_views_diagram_page.py b/atdb/taskdatabase/tests/test_views_diagram_page.py new file mode 100644 index 0000000000000000000000000000000000000000..aadaf8300eb0b278bc98a6a1a464359cd3a99fda --- /dev/null +++ b/atdb/taskdatabase/tests/test_views_diagram_page.py @@ -0,0 +1,30 @@ +from django.test import TestCase +from django.urls import reverse + +from taskdatabase.models import Task, Workflow +class DiagramPageViewTest(TestCase): + + @classmethod + def setUpTestData(cls): + + # Set up non-modified objects used by all test methods + workflow = Workflow() + workflow.save() + + # create a list of Tasks + Task.objects.get_or_create(sas_id=12345, status='finished', workflow = workflow) + Task.objects.get_or_create(sas_id=12345, status='finished', workflow = workflow) + Task.objects.get_or_create(sas_id=12345, status='stored', workflow = workflow) + + def test_url_exists_at_desired_location(self): + response = self.client.get('/atdb/diagram/') + self.assertEqual(response.status_code, 200) + + def test_url_accessible_by_name(self): + response = self.client.get(reverse('diagram')) + self.assertEqual(response.status_code, 200) + + def test_uses_correct_template(self): + response = self.client.get(reverse('diagram')) + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'taskdatabase/diagram.html') \ No newline at end of file diff --git a/atdb/taskdatabase/tests/test_views_discarded_page.py b/atdb/taskdatabase/tests/test_views_discarded_page.py new file mode 100644 index 0000000000000000000000000000000000000000..9e79f2a6dca3ece16bec5db6fa0e6d877422bee8 --- /dev/null +++ b/atdb/taskdatabase/tests/test_views_discarded_page.py @@ -0,0 +1,30 @@ +from django.test import TestCase +from django.urls import reverse + +from taskdatabase.models import Task, Workflow +class DiscardedPageViewTest(TestCase): + + @classmethod + def setUpTestData(cls): + + # Set up non-modified objects used by all test methods + workflow = Workflow() + workflow.save() + + # create a list of Tasks + Task.objects.get_or_create(sas_id=12345, status='discarded', workflow = workflow) + Task.objects.get_or_create(sas_id=12345, status='discarded', workflow = workflow) + Task.objects.get_or_create(sas_id=12345, status='stored', workflow = workflow) + + def test_url_exists_at_desired_location(self): + response = self.client.get('/atdb/discarded') + self.assertEqual(response.status_code, 200) + + def test_url_accessible_by_name(self): + response = self.client.get(reverse('discarded')) + self.assertEqual(response.status_code, 200) + + def test_uses_correct_template(self): + response = self.client.get(reverse('discarded')) + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'taskdatabase/discarded/page.html') \ No newline at end of file diff --git a/atdb/taskdatabase/tests/test_views_failures_page.py b/atdb/taskdatabase/tests/test_views_failures_page.py new file mode 100644 index 0000000000000000000000000000000000000000..a2342724238963eef495229587c9d62c0e5a1851 --- /dev/null +++ b/atdb/taskdatabase/tests/test_views_failures_page.py @@ -0,0 +1,30 @@ +from django.test import TestCase +from django.urls import reverse + +from taskdatabase.models import Task, Workflow +class FailuresPageViewTest(TestCase): + + @classmethod + def setUpTestData(cls): + + # Set up non-modified objects used by all test methods + workflow = Workflow() + workflow.save() + + # create a list of Tasks + Task.objects.get_or_create(sas_id=12345, status='processed_failed', workflow = workflow) + Task.objects.get_or_create(sas_id=12345, status='processed_failed', workflow = workflow) + Task.objects.get_or_create(sas_id=12345, status='stored', workflow = workflow) + + def test_url_exists_at_desired_location(self): + response = self.client.get('/atdb/failures') + self.assertEqual(response.status_code, 200) + + def test_url_accessible_by_name(self): + response = self.client.get(reverse('failures')) + self.assertEqual(response.status_code, 200) + + def test_uses_correct_template(self): + response = self.client.get(reverse('failures')) + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'taskdatabase/failures/page.html') \ No newline at end of file diff --git a/atdb/taskdatabase/tests/test_views_filter_page.py b/atdb/taskdatabase/tests/test_views_filter_page.py new file mode 100644 index 0000000000000000000000000000000000000000..545c5448bf48dba8aa964c517ee02f896fb0cead --- /dev/null +++ b/atdb/taskdatabase/tests/test_views_filter_page.py @@ -0,0 +1,30 @@ +from django.test import TestCase +from django.urls import reverse + +from taskdatabase.models import Task, Workflow +class FilterPageViewTest(TestCase): + + @classmethod + def setUpTestData(cls): + + # Set up non-modified objects used by all test methods + workflow = Workflow() + workflow.save() + + # create a list of Tasks + Task.objects.get_or_create(sas_id=12345, status='finished', workflow = workflow) + Task.objects.get_or_create(sas_id=12345, status='finished', workflow = workflow) + Task.objects.get_or_create(sas_id=12345, status='stored', workflow = workflow) + + def test_url_exists_at_desired_location(self): + response = self.client.get('/atdb/query/') + self.assertEqual(response.status_code, 200) + + def test_url_accessible_by_name(self): + response = self.client.get(reverse('query')) + self.assertEqual(response.status_code, 200) + + def test_uses_correct_template(self): + response = self.client.get(reverse('query')) + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'taskdatabase/query/index.html') \ No newline at end of file diff --git a/atdb/taskdatabase/tests/test_views_finished_page.py b/atdb/taskdatabase/tests/test_views_finished_page.py new file mode 100644 index 0000000000000000000000000000000000000000..3de45fa27df79bd994a2763b845408de1d62a4d7 --- /dev/null +++ b/atdb/taskdatabase/tests/test_views_finished_page.py @@ -0,0 +1,30 @@ +from django.test import TestCase +from django.urls import reverse + +from taskdatabase.models import Task, Workflow +class FinishedPageViewTest(TestCase): + + @classmethod + def setUpTestData(cls): + + # Set up non-modified objects used by all test methods + workflow = Workflow() + workflow.save() + + # create a list of Tasks + Task.objects.get_or_create(sas_id=12345, status='finished', workflow = workflow) + Task.objects.get_or_create(sas_id=12345, status='finished', workflow = workflow) + Task.objects.get_or_create(sas_id=12345, status='stored', workflow = workflow) + + def test_url_exists_at_desired_location(self): + response = self.client.get('/atdb/finished') + self.assertEqual(response.status_code, 200) + + def test_url_accessible_by_name(self): + response = self.client.get(reverse('finished')) + self.assertEqual(response.status_code, 200) + + def test_uses_correct_template(self): + response = self.client.get(reverse('finished')) + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'taskdatabase/archived/page.html') \ No newline at end of file diff --git a/atdb/taskdatabase/tests/test_views_monitoring_page.py b/atdb/taskdatabase/tests/test_views_monitoring_page.py new file mode 100644 index 0000000000000000000000000000000000000000..98fbb12b2a5d57503e45ccd295d000850179ef3c --- /dev/null +++ b/atdb/taskdatabase/tests/test_views_monitoring_page.py @@ -0,0 +1,28 @@ +from django.test import TestCase +from django.urls import reverse + +from taskdatabase.models import LatestMonitor +class MonitoringPageViewTest(TestCase): + + @classmethod + def setUpTestData(cls): + # create a list of Monitor objects + LatestMonitor.objects.get_or_create(name="stager", status='running') + LatestMonitor.objects.get_or_create(name="archiver", status='running') + LatestMonitor.objects.get_or_create(name="executor", status='running') + LatestMonitor.objects.get_or_create(name="datamanager", status='running') + LatestMonitor.objects.get_or_create(name="token", status='running') + LatestMonitor.objects.get_or_create(name="cleanup", status='running') + LatestMonitor.objects.get_or_create(name="cleanup-spider", status='running') + def test_url_exists_at_desired_location(self): + response = self.client.get('/atdb/monitoring/') + self.assertEqual(response.status_code, 200) + + def test_url_accessible_by_name(self): + response = self.client.get(reverse('monitoring')) + self.assertEqual(response.status_code, 200) + + def test_uses_correct_template(self): + response = self.client.get(reverse('monitoring')) + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'taskdatabase/monitoring_page.html') \ No newline at end of file diff --git a/atdb/taskdatabase/tests/test_views_tasks_page.py b/atdb/taskdatabase/tests/test_views_tasks_page.py new file mode 100644 index 0000000000000000000000000000000000000000..35ebbd0766af593e23e08ae12771bdca0fa8b1ce --- /dev/null +++ b/atdb/taskdatabase/tests/test_views_tasks_page.py @@ -0,0 +1,32 @@ +from django.test import TestCase +from django.urls import reverse + +from taskdatabase.models import Task, Workflow + +class TaskListViewTest(TestCase): + + @classmethod + def setUpTestData(cls): + + # Set up non-modified objects used by all test methods + workflow = Workflow() + workflow.save() + + # create a list of Tasks + Task.objects.get_or_create(sas_id=12345, workflow = workflow) + Task.objects.get_or_create(sas_id=12345, workflow = workflow) + Task.objects.get_or_create(sas_id=12345, workflow = workflow) + + def test_url_exists_at_desired_location(self): + response = self.client.get('/atdb/') + self.assertEqual(response.status_code, 200) + + def test_url_accessible_by_name(self): + response = self.client.get(reverse('index')) + self.assertEqual(response.status_code, 200) + + def test_uses_correct_template(self): + response = self.client.get(reverse('index')) + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'taskdatabase/index.html') + diff --git a/atdb/taskdatabase/tests/test_views_validation_page.py b/atdb/taskdatabase/tests/test_views_validation_page.py new file mode 100644 index 0000000000000000000000000000000000000000..da4283da15c74023e91966f72e6e82b05c687cbc --- /dev/null +++ b/atdb/taskdatabase/tests/test_views_validation_page.py @@ -0,0 +1,30 @@ +from django.test import TestCase +from django.urls import reverse + +from taskdatabase.models import Task, Workflow +class ValidationPageViewTest(TestCase): + + @classmethod + def setUpTestData(cls): + + # Set up non-modified objects used by all test methods + workflow = Workflow() + workflow.save() + + # create a list of Tasks + Task.objects.get_or_create(sas_id=12345, status='stored', workflow = workflow) + Task.objects.get_or_create(sas_id=12345, status='stored', workflow = workflow) + Task.objects.get_or_create(sas_id=12345, status='stored', workflow = workflow) + + def test_url_exists_at_desired_location(self): + response = self.client.get('/atdb/validation') + self.assertEqual(response.status_code, 200) + + def test_url_accessible_by_name(self): + response = self.client.get(reverse('validation')) + self.assertEqual(response.status_code, 200) + + def test_uses_correct_template(self): + response = self.client.get(reverse('validation')) + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'taskdatabase/validation/page.html') \ No newline at end of file diff --git a/atdb/taskdatabase/views.py b/atdb/taskdatabase/views.py index 1842db5a031c74635c27753da6ecb2fc95737258..206b3d3a1cbc73f1420e929837620fb97eae428e 100644 --- a/atdb/taskdatabase/views.py +++ b/atdb/taskdatabase/views.py @@ -40,10 +40,6 @@ from .services import algorithms logger = logging.getLogger(__name__) -class Pages(Enum): - VALIDATION = "validation" - - def redirect_with_params(view_name, params): return redirect(reverse(view_name) + params)