Skip to content
Snippets Groups Projects
test_group_creation.py 3.71 KiB
Newer Older
import types
from unittest import mock
import django.test as dtest
from django.contrib.auth.models import User
from lofardata.models import WorkSpecification, Group, ATDBProcessingSite
from lofardata.view_helpers.specification import create_work_specifications_for_group, \
    create_work_specification_for_group

class WorkSpecificationCreationDatabaseInteraction(dtest.TestCase):
    def setUp(self):
        self.user, _ = User.objects.get_or_create()
        self.site, _ = ATDBProcessingSite.objects.get_or_create(
            name="marvel", url="http://marvel.com", access_token="dummy"
        )
        self.group, _ = Group.objects.get_or_create(name="x-men", processing_site=self.site, selected_workflow="claw",
                                                    selected_workflow_tag="attack")

        self.delay_return_value = types.SimpleNamespace(id='5')

    @mock.patch('lofardata.tasks.define_work_specification.delay')
    def test_create_group_with_one_obs_id(self, mock_delay):
        mock_delay.return_value = self.delay_return_value
        create_work_specification_for_group(self.group, self.user, "123")

        work_specification = list(WorkSpecification.objects.filter(group=self.group.id))

        self.assertEqual(len(work_specification), 1)

        actual_inherited_group_values = [(x.processing_site, x.selected_workflow, x.selected_workflow_tag) for x in
                                         work_specification if x.group is self.group]

        for actual_inherited_group_value in actual_inherited_group_values:
            self.assertTupleEqual(actual_inherited_group_value,
                                  (self.site, self.group.selected_workflow, self.group.selected_workflow_tag))

    @mock.patch('lofardata.tasks.define_work_specification.delay')
    def test_create_group_with_multiple_obs_ids(self, mock_delay):
        mock_delay.return_value = self.delay_return_value
        create_work_specifications_for_group(self.group, self.user, ["123", "456", " 781 "])

        work_specification = list(WorkSpecification.objects.filter(group=self.group.id))

        self.assertEqual(len(work_specification), 3)

        actual_inherited_group_values = [(x.processing_site, x.selected_workflow, x.selected_workflow_tag) for x in
                                         work_specification if x.group is self.group]

        for actual_inherited_group_value in actual_inherited_group_values:
            self.assertTupleEqual(actual_inherited_group_value,
                                  (self.site, self.group.selected_workflow, self.group.selected_workflow_tag))

    @mock.patch('lofardata.tasks.define_work_specification.delay')
    def test_create_group_with_filters(self, mock_delay):
        mock_delay.return_value = self.delay_return_value
        obs_ids = ['123', '456']
        create_work_specifications_for_group(self.group, self.user, obs_ids)

        work_specification = list(WorkSpecification.objects.filter(group=self.group.id))

        actual_obs_ids = [x.filters['obs_id'] for x in work_specification if x.filters['obs_id'] in obs_ids]

        # assertCountEqual: Asserts that two iterables have the same elements, the same number of
        # times, without regard to order.
        self.assertCountEqual(actual_obs_ids, obs_ids)

    @mock.patch("lofardata.view_helpers.specification.set_post_submit_values")
    @mock.patch('lofardata.tasks.define_work_specification.delay')
    def test_create_group_with_post_submit_values(self, mock_delay, post_submit_mock):
        mock_delay.return_value = self.delay_return_value
        create_work_specifications_for_group(self.group, self.user, ["123"])
        self.assertTrue(post_submit_mock.called)