Beispiel #1
0
    def test_cycle_task_model(self, model_name):
        """Test Relationship POST for CycleTask<->{0}.

    Args:
        model_name: Non-Relatable model with which we are trying to create
            Relationship.
    """
        with factories.single_commit():
            workflow = wf_factories.WorkflowFactory()
            cycle = wf_factories.CycleFactory(workflow=workflow)
            cycle_task_group = wf_factories.CycleTaskGroupFactory(cycle=cycle)
            task_group = wf_factories.TaskGroupFactory(workflow=workflow)
            task_group_task = wf_factories.TaskGroupTaskFactory(
                task_group=task_group)
            wf_factories.CycleTaskGroupObjectTaskFactory(
                cycle=cycle,
                cycle_task_group=cycle_task_group,
                task_group_task=task_group_task)

        cycle_task = all_models.CycleTaskGroupObjectTask.query.one()
        instance = getattr(all_models, model_name).query.one()
        data_ct_src = relationship_api.get_relationship_post_dict(
            cycle_task, instance)
        data_ct_dst = relationship_api.get_relationship_post_dict(
            instance, cycle_task)

        response = self.api_helper.post(all_models.Relationship, data_ct_src)
        self.assertEqual(response.status_code, 201)

        response = self.api_helper.post(all_models.Relationship, data_ct_dst)
        self.assertEqual(response.status_code, 201)
    def test_cycle_state_after_post(self):
        """Test cycle status after adding a task."""
        with single_commit():
            ctg = factories.CycleTaskGroupFactory()
            ct1 = factories.CycleTaskGroupObjectTaskFactory()
            ct1.cycle_task_group = ctg

        self.api.put(ct1, {"status": "In Progress"})

        with single_commit():
            ct2 = factories.CycleTaskGroupObjectTaskFactory()
            ct2.cycle_task_group = ctg

        self.assertEqual(
            db.session.query(Cycle).filter(
                Cycle.id == ctg.cycle.id).one().status, "In Progress")
        self.assertEqual(
            db.session.query(CycleTaskGroup).filter(
                CycleTaskGroup.id == ctg.id).one().status, "In Progress")
        self.assertEqual(
            db.session.query(CycleTaskGroupObjectTask).filter(
                CycleTaskGroupObjectTask.id == ct1.id).one().status,
            "In Progress")
        self.assertEqual(
            db.session.query(CycleTaskGroupObjectTask).filter(
                CycleTaskGroupObjectTask.id == ct2.id).one().status,
            "Assigned")
 def generate_tasks_for_cycle(group_count, task_count):
     """generate number of task groups and task for current task group"""
     role_names = ("Task Assignees", "Task Secondary Assignees")
     results = {}
     with ggrc_factories.single_commit():
         workflow = factories.WorkflowFactory()
         cycle = factories.CycleFactory(workflow=workflow)
         task_group = factories.TaskGroupFactory(workflow=workflow)
         for idx in range(group_count):
             person = ggrc_factories.PersonFactory(
                 name="user for group {}".format(idx))
             cycle_task_group = factories.CycleTaskGroupFactory(
                 cycle=cycle, contact=person)
             for _ in range(task_count):
                 task_group_task = factories.TaskGroupTaskFactory(
                     task_group=task_group)
                 for r_name in role_names:
                     ggrc_factories.AccessControlPersonFactory(
                         ac_list=task_group_task.acr_name_acl_map[r_name],
                         person=person,
                     )
                 task = factories.CycleTaskGroupObjectTaskFactory(
                     cycle=cycle,
                     cycle_task_group=cycle_task_group,
                     task_group_task=task_group_task)
                 for r_name in role_names:
                     ggrc_factories.AccessControlPersonFactory(
                         person=person,
                         ac_list=task.acr_name_acl_map[r_name],
                     )
                 results[task.id] = cycle_task_group.slug
     return results
Beispiel #4
0
  def test_delete_ctg_wf_admin(self, admin_role):
    """Check deletion cycle task group by workflow member"""
    admin = self.create_user_with_role(admin_role)
    exp_count = 0
    with factories.single_commit():
      workflow = wf_factories.WorkflowFactory()
      workflow.add_person_with_role_name(admin, 'Admin')
      task_group = wf_factories.TaskGroupFactory(
          title='TestTG',
          context=factories.ContextFactory(),
          workflow=workflow
      )
      wf_factories.TaskGroupTaskFactory(
          title='TestTGT',
          task_group=task_group,
          start_date=datetime.date(2017, 8, 3),
          end_date=datetime.date(2017, 8, 7)
      )
      cycle = wf_factories.CycleFactory(workflow=workflow)
      cycle_task_group = wf_factories.CycleTaskGroupFactory(
          cycle=cycle,
          title='Title1'
      )
    ctg = all_models.CycleTaskGroup.query.get(cycle_task_group.id)
    self.generator.activate_workflow(workflow)
    self.api.set_user(admin)

    response = self.api.delete(ctg)

    self.assert200(response)
    count = len(all_models.CycleTaskGroup.query.all())
    self.assertEquals(count, exp_count)
Beispiel #5
0
 def generate_tasks_for_cycle(self, group_count, task_count):
     """generate number of task groups and task for current task group"""
     role_names = ("Task Assignees", "Task Secondary Assignees")
     results = {}
     with single_commit():
         workflow = factories.WorkflowFactory()
         cycle = factories.CycleFactory(workflow=workflow)
         task_group = factories.TaskGroupFactory(workflow=workflow)
         for idx in range(group_count):
             person = PersonFactory(name="user for group {}".format(idx))
             cycle_task_group = factories.CycleTaskGroupFactory(
                 cycle=cycle, contact=person)
             for _ in range(task_count):
                 task_group_task = factories.TaskGroupTaskFactory(
                     task_group=task_group)
                 for r_name in role_names:
                     ggrc_factories.AccessControlListFactory(
                         object=task_group_task,
                         person=person,
                         ac_role_id=self.get_role_id_for_obj(
                             task_group_task, r_name))
                 task = factories.CycleTaskFactory(
                     cycle=cycle,
                     cycle_task_group=cycle_task_group,
                     task_group_task=task_group_task)
                 for r_name in role_names:
                     ggrc_factories.AccessControlListFactory(
                         object=task,
                         person=person,
                         ac_role_id=self.get_role_id_for_obj(task, r_name))
                 results[task.id] = cycle_task_group.slug
     return results
Beispiel #6
0
  def _create_cycle_structure():
    """Create cycle structure.

    It will create workflow, cycle, group and 3 tasks in that group.

    Retruns tuple:
        workflow, cycle, group and list of tasks.
    """
    workflow = wf_factories.WorkflowFactory(
        status=all_models.Workflow.ACTIVE)
    cycle = wf_factories.CycleFactory(workflow=workflow)
    group = wf_factories.CycleTaskGroupFactory(
        cycle=cycle,
        context=cycle.workflow.context
    )
    tasks = []
    for ind in xrange(3):
      tasks.append(wf_factories.CycleTaskFactory(
          title='task{}'.format(ind),
          cycle=cycle,
          cycle_task_group=group,
          context=cycle.workflow.context,
          start_date=datetime.datetime.now(),
          end_date=datetime.datetime.now() + datetime.timedelta(7)
      ))
    return workflow, cycle, group, tasks
Beispiel #7
0
 def setUp(self):
     super(TestStatusApiPost, self).setUp()
     self.api = Api()
     with factories.single_commit():
         self.workflow = wf_factories.WorkflowFactory()
         self.cycle = wf_factories.CycleFactory(workflow=self.workflow)
         self.group = wf_factories.CycleTaskGroupFactory(
             cycle=self.cycle, context=self.cycle.workflow.context)
         self.task = wf_factories.CycleTaskFactory(
             cycle=self.cycle,
             cycle_task_group=self.group,
             context=self.cycle.workflow.context)
Beispiel #8
0
    def test_get_ctg_g_reader_no_role(self):
        """GET CycleTaskGroup collection logged in as GlobalReader & No Role."""
        with factories.single_commit():
            wf_factories.CycleTaskGroupFactory()
            self.setup_helper.setup_person(rbac_helper.GR_RNAME, "No Role")

        g_reader = self.setup_helper.get_person(rbac_helper.GR_RNAME,
                                                "No Role")
        self.api_helper.set_user(g_reader)

        cycle_task_group = all_models.CycleTaskGroup.query.one()
        response = self.api_helper.get_collection(cycle_task_group,
                                                  (cycle_task_group.id, ))
        self.assertTrue(
            response.json["cycle_task_groups_collection"]["cycle_task_groups"])
  def generate_tasks_for_cycle(cycle_count, task_count):
    """generate seceted number of cycles and tasks"""
    role_names = ("Task Assignees", "Task Secondary Assignees")
    results = {}
    with ggrc_factories.single_commit():
      for _ in range(cycle_count):
        workflow = factories.WorkflowFactory()
        cycle = factories.CycleFactory(
            workflow=workflow,
        )
        cycle.contact = ggrc_factories.PersonFactory(
            name="user for cycle {}".format(cycle.id)
        )
        person = ggrc_factories.PersonFactory(
            name="user for cycle tasks {}".format(cycle.id)
        )
        task_group = factories.TaskGroupFactory(workflow=workflow)
        for _ in range(task_count):
          task_group_task = factories.TaskGroupTaskFactory(
              task_group=task_group)
          for r_name in role_names:
            role = all_models.AccessControlRole.query.filter(
                all_models.AccessControlRole.name == r_name,
                all_models.AccessControlRole.object_type ==
                task_group_task.type,
            ).one()
            ggrc_factories.AccessControlListFactory(ac_role=role,
                                                    object=task_group_task,
                                                    person=person)
          cycle_task_group = factories.CycleTaskGroupFactory(
              cycle=cycle, contact=person)

          task = factories.CycleTaskGroupObjectTaskFactory(
              cycle=cycle,
              cycle_task_group=cycle_task_group,
              task_group_task=task_group_task
          )
          for r_name in role_names:
            role = all_models.AccessControlRole.query.filter(
                all_models.AccessControlRole.name == r_name,
                all_models.AccessControlRole.object_type == task.type,
            ).one()
            ggrc_factories.AccessControlListFactory(ac_role=role,
                                                    object=task,
                                                    person=person)
          results[task.id] = cycle.slug
    return results
Beispiel #10
0
    def setUp(self):
        """Create indexable objects which provide required set of fulltext attrs

    Fulltext attributes are: title, name, email, notes, description, slug
    """

        super(TestCycleGroup, self).setUp()

        with single_commit():
            # Create cycles
            objects = [
                factories.CycleTaskGroupFactory(title=title, description=desc)
                for title, desc in (
                    ('t01', 'd01'),
                    ('t02', 'd02'),
                    ('t11', 'd11'),
                )
            ]
            self.objects = dict((i.title, i.id) for i in objects)
 def setUp(self):
     with ggrc_factories.single_commit():
         self.workflow = factories.WorkflowFactory(
             status=all_models.Workflow.ACTIVE)
         self.cycle = factories.CycleFactory(workflow=self.workflow)
         self.group = factories.CycleTaskGroupFactory(
             cycle=self.cycle, context=self.cycle.workflow.context)
         self.tasks = []
         for ind, task_status in enumerate(self.DEFAULT_TASK_STATUSES):
             self.tasks.append(
                 factories.CycleTaskFactory(
                     title='task{}'.format(ind),
                     cycle=self.cycle,
                     cycle_task_group=self.group,
                     context=self.cycle.workflow.context,
                     status=task_status,
                 ))
     # Emulate that current user is assignee for all test CycleTasks.
     self.task_ids = [t.id for t in self.tasks]
Beispiel #12
0
 def generate_tasks_for_cycle(cycle_count, task_count):
     """generate seceted number of cycles and tasks"""
     results = {}
     for _ in range(cycle_count):
         workflow = factories.WorkflowFactory()
         cycle = factories.CycleFactory(workflow=workflow)
         person = PersonFactory(name="user for cycle {}".format(cycle.id))
         task_group = factories.TaskGroupFactory(workflow=workflow)
         for _ in range(task_count):
             task_group_task = factories.TaskGroupTaskFactory(
                 task_group=task_group, contact=person)
             cycle_task_group = factories.CycleTaskGroupFactory(
                 cycle=cycle, contact=person)
             task = factories.CycleTaskFactory(
                 cycle=cycle,
                 cycle_task_group=cycle_task_group,
                 contact=person,
                 task_group_task=task_group_task)
             results[task.id] = cycle.slug
     return results
 def generate_tasks_for_cycle(group_count, task_count):
     """generate number of task groups and task for current task group"""
     results = {}
     workflow = factories.WorkflowFactory()
     cycle = factories.CycleFactory(workflow=workflow)
     task_group = factories.TaskGroupFactory(workflow=workflow)
     for idx in range(group_count):
         person = PersonFactory(name="user for group {}".format(idx))
         cycle_task_group = factories.CycleTaskGroupFactory(cycle=cycle,
                                                            contact=person)
         for _ in range(task_count):
             task_group_task = factories.TaskGroupTaskFactory(
                 task_group=task_group, contact=person)
             task = factories.CycleTaskFactory(
                 cycle=cycle,
                 cycle_task_group=cycle_task_group,
                 contact=person,
                 task_group_task=task_group_task)
             results[task.id] = cycle_task_group.slug
     return results
 def setUp(self):
     super(TestStatusApiPatch, self).setUp()
     self.api = Api()
     with factories.single_commit():
         self.assignee = factories.PersonFactory(
             email="*****@*****.**")
         self.workflow = wf_factories.WorkflowFactory()
         self.cycle = wf_factories.CycleFactory(workflow=self.workflow)
         self.group = wf_factories.CycleTaskGroupFactory(
             cycle=self.cycle, context=self.cycle.workflow.context)
         self.tasks = []
         for ind in xrange(3):
             self.tasks.append(
                 wf_factories.CycleTaskFactory(
                     title='task{}'.format(ind),
                     cycle=self.cycle,
                     cycle_task_group=self.group,
                     context=self.cycle.workflow.context))
     # Emulate that current user is assignee for all test CycleTasks.
     all_models.CycleTaskGroupObjectTask.current_user_wfo_or_assignee = (
         MagicMock(return_value=True))
    def generate_tasks_for_cycle(cycle_count, task_count):
        """generate seceted number of cycles and tasks"""
        role_names = ("Task Assignees", "Task Secondary Assignees")
        statuses = ["Assigned", "In Progress", "Finished", "Verified"]
        results = {}
        with ggrc_factories.single_commit():
            for _ in range(cycle_count):
                workflow = factories.WorkflowFactory()
                cycle = factories.CycleFactory(workflow=workflow, )
                cycle.contact = ggrc_factories.PersonFactory(
                    name="user for cycle {}".format(cycle.id))
                person = ggrc_factories.PersonFactory(
                    name="user for cycle tasks {}".format(cycle.id))
                task_group = factories.TaskGroupFactory(workflow=workflow)
                for _ in range(task_count):
                    task_group_task = factories.TaskGroupTaskFactory(
                        task_group=task_group)
                    for r_name in role_names:
                        ggrc_factories.AccessControlPersonFactory(
                            person=person,
                            ac_list=task_group_task.acr_name_acl_map[r_name],
                        )
                    cycle_task_group = factories.CycleTaskGroupFactory(
                        cycle=cycle, contact=person)

                    task = factories.CycleTaskGroupObjectTaskFactory(
                        cycle=cycle,
                        cycle_task_group=cycle_task_group,
                        task_group_task=task_group_task,
                        status=statuses.pop())
                    for r_name in role_names:
                        ggrc_factories.AccessControlPersonFactory(
                            person=person,
                            ac_list=task.acr_name_acl_map[r_name],
                        )
                    results[task.id] = cycle.slug
        return results
Beispiel #16
0
  def test_create_cycle_task(self, member_role):
    """Check creation cycle task group by workflow member"""
    member = self.create_user_with_role(member_role)
    with factories.single_commit():
      workflow = wf_factories.WorkflowFactory()
      workflow.add_person_with_role_name(member, 'Workflow Member')
      cycle = wf_factories.CycleFactory(workflow=workflow)
      cycle_id = cycle.id
      ctg_id = wf_factories.CycleTaskGroupFactory(
          cycle=cycle,
          title='TestCTG',
      ).id
    self.generator.activate_workflow(workflow)
    self.api.set_user(member)

    response = self.api.post(all_models.CycleTaskGroupObjectTask, {
        "cycle_task_group_object_task": {
            "title": "New Cycle Task",
            "start_date": datetime.datetime.now().strftime("%Y-%m-%d"),
            "end_date": datetime.datetime.now().strftime("%Y-%m-%d"),
            "context": None,
            "task_type": "text",
            "cycle_task_group": {
                "id": ctg_id,
                "type": "Task Group",
            },
            "cycle": {
                "id": cycle_id,
                "type": "Cycle",
            },
        }
    })

    self.assert403(response)
    count = len(all_models.CycleTaskGroupObjectTask.query.all())
    self.assertEquals(count, 0)