Example #1
0
 def test_revise_one_parent_post_unselected(self):
     """
     Tests a post request to revise a part which has one parent.
     This parent is not selected, and so its bom should not change.
     """
     parent = PartController.create("RefParent", "Part", "a", self.user,
                                    self.DATA)
     parent.add_child(self.controller, 10, 25, "-")
     link = parent.get_children(1)[0].link
     data = {
         "revision": "b",
         "parents-TOTAL_FORMS": "1",
         "parents-INITIAL_FORMS": "1",
         "parents-0-selected": "",
         "parents-0-link": link.id,
         "parents-0-new_parent": parent.id,
         "children-TOTAL_FORMS": "0",
         "children-INITIAL_FORMS": "0",
         "documents-TOTAL_FORMS": "0",
         "documents-INITIAL_FORMS": "0",
     }
     response = self.post(self.base_url + "revisions/", data)
     revisions = self.controller.get_next_revisions()
     self.assertEqual(1, len(revisions))
     rev = revisions[0].part
     self.assertEqual("b", rev.revision)
     # ensure the old revision is still a child of the parent
     children = parent.get_children(1)
     self.assertEqual([(1, link)], children)
     self.assertFalse(PartController(rev, self.user).get_parents())
Example #2
0
 def test_revise_one_child_post_unselected(self):
     """
     Tests a post request to revise a part with child which is not selected.
     """
     child = PartController.create("RefChild", "Part", "a", self.user,
                                   self.DATA)
     self.controller.add_child(child, 10, 25, "-")
     link = self.controller.get_children(1)[0].link
     data = {
         "revision": "b",
         "parents-TOTAL_FORMS": "0",
         "parents-INITIAL_FORMS": "0",
         "children-TOTAL_FORMS": "1",
         "children-INITIAL_FORMS": "1",
         "children-0-selected": "",
         "children-0-link": link.id,
         "documents-TOTAL_FORMS": "0",
         "documents-INITIAL_FORMS": "0",
     }
     response = self.post(self.base_url + "revisions/", data)
     revisions = self.controller.get_next_revisions()
     self.assertEqual(1, len(revisions))
     rev = revisions[0].part
     self.assertEqual("b", rev.revision)
     # ensure the part is still a child of the old revision
     children = self.controller.get_children(1)
     self.assertEqual([(1, link)], children)
     # ensure the part is not a child of the new revision
     children = PartController(rev, self.user).get_children(1)
     self.assertEqual(0, len(children))
Example #3
0
 def test_parents(self):
     p1 = PartController.create("c1", "Part", "a", self.user, self.DATA)
     p1.add_child(self.controller, 10, 20)
     p2 = PartController.create("c2", "Part", "a", self.user, self.DATA)
     p2.add_child(self.controller, 10, 20)
     response = self.get(self.base_url + "parents/", page="parents")
     self.assertEqual(2, len(list(response.context["parents"])))
Example #4
0
 def get_all_geometry_files(self, doc_file):
     if self.PartDecompose is not None:
         pctrl = PartController(self.PartDecompose, self._user)
         if self._stps is None:
             children_ids = [
                 c.link.child_id
                 for c in pctrl.get_children(-1,
                                             related=("child__id"),
                                             only=(
                                                 "child__id",
                                                 "parent__id",
                                             ))
             ]
             if children_ids:
                 docs = pmodels.DocumentPartLink.objects.now().filter(
                     document__type="Document3D",
                     part__in=children_ids).values_list("document",
                                                        flat=True)
                 dfs = pmodels.DocumentFile.objects.filter(document__in=docs, deprecated=False)\
                         .filter(is_stp).values_list("id", flat=True)
                 self._stps = dfs
             else:
                 self._stps = pmodels.DocumentFile.objects.none(
                 ).values_list("id", flat=True)
         q = Q(stp=doc_file)
         stps = list(self._stps)
         if stps:
             q |= Q(stp__in=stps)
         gfs = GeometryFile.objects.filter(q)
     else:
         gfs = GeometryFile.objects.filter(stp=doc_file)
     return gfs.values_list("file", flat=True)
Example #5
0
 def test_parents(self):
     p1 = PartController.create("c1", "Part", "a", self.user, self.DATA)
     p1.add_child(self.controller, 10, 20)
     p2 = PartController.create("c2", "Part", "a", self.user, self.DATA)
     p2.add_child(self.controller, 10, 20)
     response = self.get(self.base_url + "parents/", page="parents")
     self.assertEqual(2, len(list(response.context["parents"])))
Example #6
0
    def test_revise_two_childrens_get(self):
        """
        Tests a get request to revise a part with two children.
        """
        child1 = PartController.create("RefChild1", "Part", "a", self.user,
                                       self.DATA)
        self.controller.add_child(child1, 10, 25, "-")
        child2 = PartController.create("RefChild2", "Part", "a", self.user,
                                       self.DATA)
        self.controller.add_child(child2, 10, 55, "-")

        response = self.get(self.base_url + "revisions/")
        # checks that it is necessary to confirm the revision
        self.assertTrue(response.context["confirmation"])
        formset = response.context["children_formset"]

        self.assertEqual(2, formset.total_form_count())
        form1, form2 = formset.forms
        self.assertTrue(form1.fields["selected"].initial)
        self.assertTrue(form1.initial["link"].child_id in (child1.id,
                                                           child2.id))
        self.assertTrue(form2.fields["selected"].initial)
        self.assertTrue(form2.initial["link"].child_id in (child1.id,
                                                           child2.id))
        self.assertNotEqual(form2.initial["link"], form1.initial["link"])
Example #7
0
 def test_navigate_parents(self):
     """
     Tests a navigate with the "parents" option set.
     """
     data = self.DATA.copy()
     data["name"] = "Coffee"
     parent1 = PartController.create("c1", "Part", "k",
             self.user, data, True, True)
     parent1.add_child(self.controller, 15, 789, "kg")
     for osr, results in ((False, ()), (True, (parent1.object, ))):
         self.get_graph_data({"parents" : True, OSR : osr }, results)
         self.assertCount(2, 1)
         main, parent_node = self.nodes
         self.assertTrue("789" in self.edges[0].text_content())
         self.assertTrue("15" in self.edges[0].text_content())
         self.assertTrue("kg" in self.edges[0].text_content())
         text = parent_node.text_content().strip()
         self.assertTrue(data["name"] in text)
     # add another parent to parent1
     parent2 = PartController.create("c2", "Part", "k",
             self.user, data, True, True)
     parent2.add_child(parent1, 15, 789, "kg")
     for osr, results in ((False, ()), (True, (parent1.object, parent2.object))):
         self.get_graph_data({"parents" : True, OSR : osr }, results)
         self.assertCount(3, 2)
     self.get_graph_data({"parents" : True, OSR : True }, (parent2.object,))
     self.assertCount(1, 0)
     # add the controller to parent2
     parent2.add_child(self.controller, 5, 79, "kg")
     for osr, results in ((False, ()), (True, (parent1.object, parent2.object))):
         self.get_graph_data({"parents" : True, OSR : osr }, results)
         self.assertCount(3, 3)
     for result in (self.cie, self.group, self.user, self.controller.object):
         self.get_graph_data({"parents" : True, OSR : True }, (result,))
         self.assertCount(1, 0)
Example #8
0
 def test_children(self):
     child1 = PartController.create("c1", "Part", "a", self.user, self.DATA)
     self.controller.add_child(child1, 10 , 20)
     child2 = PartController.create("c2", "Part", "a", self.user, self.DATA)
     self.controller.add_child(child2, 10, 20)
     response = self.get(self.base_url + "BOM-child/", page="BOM-child")
     self.assertEqual(2, len(list(response.context["children"])))
     form = response.context["display_form"]
Example #9
0
 def test_children(self):
     child1 = PartController.create("c1", "Part", "a", self.user, self.DATA)
     self.controller.add_child(child1, 10, 20)
     child2 = PartController.create("c2", "Part", "a", self.user, self.DATA)
     self.controller.add_child(child2, 10, 20)
     response = self.get(self.base_url + "BOM-child/", page="BOM-child")
     self.assertEqual(2, len(list(response.context["children"])))
     form = response.context["display_form"]
Example #10
0
    def test_update_no_checkin(self):
        ctrl = self.create("d1", "Document3D")
        natives = get_natives("test.native_asm", "NBA_ASM.native_asm",
                              "NUT.native", "BOLT.native", "L-BRACKET.native")
        steps = get_steps("bolt.step", "l-bracket.step", "nut.step")
        builder = AssemblyBuilder(ctrl)
        builder.build_assembly(_ASSEMBLY1, natives, steps, False)

        tree = copy.deepcopy(_UPDATED_ASSEMBLY1)
        tree["children"][0]["document"]["checkin"] = False
        natives = get_natives("test.native_asm", "NBA_ASM.native_asm",
                              "NUT.native", "BOLT.native")
        steps = get_steps("bolt.step", "nut.step")
        builder = AssemblyBuilder(ctrl)
        builder.update_assembly(tree, natives, steps)
        self.assertEqual(5, models.Part.objects.all().count())
        self.assertEqual(5, models.Document.objects.all().count())
        # root
        root = PartController(ctrl.PartDecompose, self.user)
        self.assertDoc(root.object, "test.step", "test.native_asm")
        self.assertEqual("test", root.name)
        children = root.get_children(-1)
        self.assertEqual(4, len(children))
        # l-bracket
        pcl = children[0].link
        child = pcl.child
        self.assertLink(pcl, "L-BRACKET", root.object, 1, 1)
        self.assertDoc(child, u"l-bracket.step", u"L-BRACKET.native")
        # nba_asm
        pcl = children[1].link
        child = nba_asm = pcl.child
        self.assertLink(pcl, "NBA_ASM", root.object, 2, 3)
        self.assertDoc(child, u"NBA_ASM.step", u"NBA_ASM.native_asm")
        # bolt
        pcl = children[2].link
        child = pcl.child
        self.assertLink(pcl, "BOLT", nba_asm, 1, 2)
        self.assertDoc(child, u"bolt.step", u"BOLT.native")
        # nut
        pcl = children[3].link
        child = pcl.child
        self.assertLink(pcl, "NUT", nba_asm, 2, 1)
        self.assertDoc(child, u"nut.step", u"NUT.native")

        # minor revisions of document files
        for doc in models.Document.objects.all():
            for f in doc.files:
                if doc.name == "L-BRACKET":
                    self.assertEqual(1, f.revision)
                else:
                    self.assertEqual(2, f.revision)
        # check product is valid
        self.assertProduct(ctrl)
Example #11
0
    def test_update_no_checkin(self):
        ctrl = self.create("d1", "Document3D")
        natives = get_natives("test.native_asm", "NBA_ASM.native_asm",
                "NUT.native", "BOLT.native", "L-BRACKET.native")
        steps = get_steps("bolt.step", "l-bracket.step", "nut.step")
        builder = AssemblyBuilder(ctrl)
        builder.build_assembly(_ASSEMBLY1, natives, steps, False)

        tree = copy.deepcopy(_UPDATED_ASSEMBLY1)
        tree["children"][0]["document"]["checkin"] = False
        natives = get_natives("test.native_asm", "NBA_ASM.native_asm",
                "NUT.native", "BOLT.native")
        steps = get_steps("bolt.step", "nut.step")
        builder = AssemblyBuilder(ctrl)
        builder.update_assembly(tree, natives, steps)
        self.assertEqual(5, models.Part.objects.all().count())
        self.assertEqual(5, models.Document.objects.all().count())
        # root
        root = PartController(ctrl.PartDecompose, self.user)
        self.assertDoc(root.object, "test.step", "test.native_asm")
        self.assertEqual("test", root.name)
        children = root.get_children(-1)
        self.assertEqual(4, len(children))
        # l-bracket
        pcl = children[0].link
        child = pcl.child
        self.assertLink(pcl, "L-BRACKET", root.object, 1, 1)
        self.assertDoc(child, u"l-bracket.step", u"L-BRACKET.native")
        # nba_asm
        pcl = children[1].link
        child = nba_asm = pcl.child
        self.assertLink(pcl, "NBA_ASM", root.object, 2, 3)
        self.assertDoc(child, u"NBA_ASM.step", u"NBA_ASM.native_asm")
        # bolt
        pcl = children[2].link
        child = pcl.child
        self.assertLink(pcl, "BOLT", nba_asm, 1, 2)
        self.assertDoc(child, u"bolt.step", u"BOLT.native")
        # nut
        pcl = children[3].link
        child = pcl.child
        self.assertLink(pcl, "NUT", nba_asm, 2, 1)
        self.assertDoc(child, u"nut.step", u"NUT.native")

        # minor revisions of document files
        for doc in models.Document.objects.all():
            for f in doc.files:
                if doc.name == "L-BRACKET":
                    self.assertEqual(1, f.revision)
                else:
                    self.assertEqual(2, f.revision)
        # check product is valid
        self.assertProduct(ctrl)
Example #12
0
 def test_revise_one_parent_post_selected(self):
     """
     Tests a post request to revise a part which has one parent.
     This parent is selected, and so its bom must be updated.
     """
     parent = PartController.create("RefParent", "Part", "a", self.user, self.DATA)
     parent.add_child(self.controller, 10, 25, "-")
     link = parent.get_children(1)[0].link
     data = { "revision" : "b",
              "parents-TOTAL_FORMS" : "1",
              "parents-INITIAL_FORMS" : "1",
              "parents-0-selected" : "on",
              "parents-0-link" : link.id,
              "parents-0-new_parent" : parent.id,
              "children-TOTAL_FORMS" : "0",
              "children-INITIAL_FORMS" : "0",
              "documents-TOTAL_FORMS" : "0",
              "documents-INITIAL_FORMS" : "0",
              }
     response = self.post(self.base_url + "revisions/", data)
     revisions = self.controller.get_next_revisions()
     self.assertEqual(1, len(revisions))
     rev = revisions[0].part
     self.assertEqual("b", rev.revision)
     # ensure the old revision is still a child of the parent
     children = parent.get_children(1)
     self.assertNotEqual([(1, link)], children)
     self.assertEqual(1, len(children))
     level, link2 = children[0]
     self.assertEqual(parent.id, link2.parent_id)
     self.assertEqual(link.order, link2.order)
     self.assertEqual(link.quantity, link2.quantity)
     self.assertEqual(link.unit, link2.unit)
     self.assertEqual(rev.id, link2.child_id)
     self.assertFalse(self.controller.get_parents())
Example #13
0
 def test_add_child(self):
     response = self.get(self.base_url + "BOM-child/add/", link=True)
     child1 = PartController.create("c1", "Part", "a", self.user, self.DATA)
     response = self.client.post(self.base_url + "BOM-child/add/",
             {"type": "Part", "reference":"c1", "revision":"a",
                 "quantity" : 10, "order" : 10, "unit" : "m"})
     self.assertEquals(1, len(self.controller.get_children()))
Example #14
0
 def test_revise_one_parent_post_unselected(self):
     """
     Tests a post request to revise a part which has one parent.
     This parent is not selected, and so its bom should not change.
     """
     parent = PartController.create("RefParent", "Part", "a", self.user, self.DATA)
     parent.add_child(self.controller, 10, 25, "-")
     link = parent.get_children(1)[0].link
     data = { "revision" : "b",
              "parents-TOTAL_FORMS" : "1",
              "parents-INITIAL_FORMS" : "1",
              "parents-0-selected" : "",
              "parents-0-link" : link.id,
              "parents-0-new_parent" : parent.id,
              "children-TOTAL_FORMS" : "0",
              "children-INITIAL_FORMS" : "0",
              "documents-TOTAL_FORMS" : "0",
              "documents-INITIAL_FORMS" : "0",
              }
     response = self.post(self.base_url + "revisions/", data)
     revisions = self.controller.get_next_revisions()
     self.assertEqual(1, len(revisions))
     rev = revisions[0].part
     self.assertEqual("b", rev.revision)
     # ensure the old revision is still a child of the parent
     children = parent.get_children(1)
     self.assertEqual([(1, link)], children)
     self.assertFalse(PartController(rev, self.user).get_parents())
Example #15
0
 def test_attached_parts_two_parts(self):
     doc = DocumentController.create("Doc", "Document", "a", self.user,
             self.DATA)
     doc.attach_to_part(self.controller)
     part2 = PartController.create("Part2", "Part", "a", self.user, self.DATA)
     doc.attach_to_part(part2)
     wanted = [
         {
             "id": self.controller.id,
             "reference": self.controller.reference,
             "type": self.controller.type,
             "revision": self.controller.revision,
             "name": self.controller.name,
         },
         {
             "id": part2.id,
             "reference": part2.reference,
             "type": part2.type,
             "revision": part2.revision,
             "name": part2.name,
         },
     ]
     key = lambda x: x["id"]
     url = "/api/object/%d/attached_parts/" % doc.id
     data = self.get(url)
     self.assertEqual(sorted(data["parts"], key=key), sorted(wanted, key=key))
Example #16
0
 def test_revise_one_child_post_unselected(self):
     """
     Tests a post request to revise a part with child which is not selected.
     """
     child = PartController.create("RefChild", "Part", "a", self.user, self.DATA)
     self.controller.add_child(child, 10, 25, "-")
     link = self.controller.get_children(1)[0].link
     data = { "revision" : "b",
              "parents-TOTAL_FORMS" : "0",
              "parents-INITIAL_FORMS" : "0",
              "children-TOTAL_FORMS" : "1",
              "children-INITIAL_FORMS" : "1",
              "children-0-selected" : "",
              "children-0-link" : link.id,
              "documents-TOTAL_FORMS" : "0",
              "documents-INITIAL_FORMS" : "0",
              }
     response = self.post(self.base_url + "revisions/", data)
     revisions = self.controller.get_next_revisions()
     self.assertEqual(1, len(revisions))
     rev = revisions[0].part
     self.assertEqual("b", rev.revision)
     # ensure the part is still a child of the old revision
     children = self.controller.get_children(1)
     self.assertEqual([(1, link)], children)
     # ensure the part is not a child of the new revision
     children = PartController(rev, self.user).get_children(1)
     self.assertEqual(0, len(children))
Example #17
0
    def test_update_assembly_locations(self):
        ctrl = self.create("d1", "Document3D")
        natives = get_natives("test.native_asm", "NBA_ASM.native_asm",
                              "NUT.native", "BOLT.native", "L-BRACKET.native")
        steps = get_steps("bolt.step", "l-bracket.step", "nut.step")
        builder = AssemblyBuilder(ctrl)
        builder.build_assembly(_ASSEMBLY1, natives, steps, False)

        tree = copy.deepcopy(_UPDATED_ASSEMBLY1)
        m1 = [1, 7, 5, 9, 5, 4, 3, 2, 2, 0, 5, 1]
        tree["children"][0]["local_matrix"] = m1
        steps = get_steps("bolt.step", "l-bracket.step", "nut.step")
        builder = AssemblyBuilder(ctrl)
        builder.update_assembly(tree, natives, steps)
        self.assertEqual(5, models.Document.objects.all().count())
        self.assertEqual(5, models.Part.objects.all().count())
        # root
        root = PartController(ctrl.PartDecompose, self.user)
        self.assertDoc(root.object, "test.step", "test.native_asm")
        self.assertEqual("test", root.name)
        children = root.get_children(-1)
        self.assertEqual(4, len(children))
        # l-bracket
        pcl = children[0].link
        child = pcl.child
        self.assertLink(pcl, "L-BRACKET", root.object, 1, 1)
        self.assertEqual(m1, pcl.extensions[0].to_array())
        self.assertDoc(child, u"l-bracket.step", u"L-BRACKET.native")
        # nba_asm
        pcl = children[1].link
        child = nba_asm = pcl.child
        self.assertLink(pcl, "NBA_ASM", root.object, 2, 3)
        self.assertDoc(child, u"NBA_ASM.step", u"NBA_ASM.native_asm")
        # bolt
        pcl = children[2].link
        child = pcl.child
        self.assertLink(pcl, "BOLT", nba_asm, 1, 2)
        self.assertDoc(child, u"bolt.step", u"BOLT.native")
        # nut
        pcl = children[3].link
        child = pcl.child
        self.assertLink(pcl, "NUT", nba_asm, 2, 1)
        self.assertDoc(child, u"nut.step", u"NUT.native")

        # check product is valid
        self.assertProduct(ctrl)
Example #18
0
    def test_update_assembly_locations(self):
        ctrl = self.create("d1", "Document3D")
        natives = get_natives("test.native_asm", "NBA_ASM.native_asm",
                "NUT.native", "BOLT.native", "L-BRACKET.native")
        steps = get_steps("bolt.step", "l-bracket.step", "nut.step")
        builder = AssemblyBuilder(ctrl)
        builder.build_assembly(_ASSEMBLY1, natives, steps, False)

        tree = copy.deepcopy(_UPDATED_ASSEMBLY1)
        m1 = [1, 7, 5, 9, 5, 4, 3, 2, 2, 0, 5, 1]
        tree["children"][0]["local_matrix"] = m1
        steps = get_steps("bolt.step", "l-bracket.step", "nut.step")
        builder = AssemblyBuilder(ctrl)
        builder.update_assembly(tree, natives, steps)
        self.assertEqual(5, models.Document.objects.all().count())
        self.assertEqual(5, models.Part.objects.all().count())
        # root
        root = PartController(ctrl.PartDecompose, self.user)
        self.assertDoc(root.object, "test.step", "test.native_asm")
        self.assertEqual("test", root.name)
        children = root.get_children(-1)
        self.assertEqual(4, len(children))
        # l-bracket
        pcl = children[0].link
        child = pcl.child
        self.assertLink(pcl, "L-BRACKET", root.object, 1, 1)
        self.assertEqual(m1, pcl.extensions[0].to_array())
        self.assertDoc(child, u"l-bracket.step", u"L-BRACKET.native")
        # nba_asm
        pcl = children[1].link
        child = nba_asm = pcl.child
        self.assertLink(pcl, "NBA_ASM", root.object, 2, 3)
        self.assertDoc(child, u"NBA_ASM.step", u"NBA_ASM.native_asm")
        # bolt
        pcl = children[2].link
        child = pcl.child
        self.assertLink(pcl, "BOLT", nba_asm, 1, 2)
        self.assertDoc(child, u"bolt.step", u"BOLT.native")
        # nut
        pcl = children[3].link
        child = pcl.child
        self.assertLink(pcl, "NUT", nba_asm, 2, 1)
        self.assertDoc(child, u"nut.step", u"NUT.native")

        # check product is valid
        self.assertProduct(ctrl)
Example #19
0
    def _add_children(self, component, root):
        pctrl = PartController(root, self.user)
        pctrl.check_readable()
        children = pctrl.get_children(-1)
        if not children:
            return

        components = { root.id: component, }
        links = [c.link for c in children]
        locations = defaultdict(list) # pcl -> locations
        for loc in Location_link.objects.filter(link__in=links):
            locations[loc.link_id].append(loc)
        parts = [l.child_id for l in links]
        part2doc = {}
        for doc in Document3D.objects.filter(PartDecompose__in=parts):
            key = doc.PartDecompose_id
            # if two revisions are present, takes the newest one
            otherdoc = part2doc.get(key)
            if otherdoc is None or otherdoc.ctime < doc.ctime:
                part2doc[key] = doc

        visited_links = set()
        mtime = root.ctime
        for link in links:
            if link.id in visited_links:
                pass
            try:
                comp = components[link.parent_id]
                part = link.child
                doc = part2doc[part.id]
                locs = locations[link.id]
            except KeyError:
                # it is not an interessing link
                pass
            else:
                mtime = max(mtime, link.ctime)
                child_comp = self._get_component(doc, part)
                locs = [{"local_name": l.name, "local_matrix": l.to_array()} for l in locs]
                comp["children"].append({
                    "component": child_comp,
                    "locations": locs,
                })
                components[part.id] = child_comp
                visited_links.add(link.id)

        self._allowed_checkout = self._get_checkout(mtime)
Example #20
0
    def test_build_assembly(self):
        self.assertEqual(0, models.PLMObject.objects.all().count())
        ctrl = self.create("d1", "Document3D")
        natives = get_natives("test.native_asm", "NBA_ASM.native_asm",
                              "NUT.native", "BOLT.native", "L-BRACKET.native")
        steps = get_steps("bolt.step", "l-bracket.step", "nut.step")
        builder = AssemblyBuilder(ctrl)
        df = builder.build_assembly(_ASSEMBLY1, natives, steps, False)

        self.assertEqual(5, models.Document.objects.all().count())
        self.assertEqual(5, models.Part.objects.all().count())
        # root
        self.assertEqual("test.native_asm", df.filename)
        root = PartController(ctrl.PartDecompose, self.user)
        self.assertDoc(root.object, "test.step", "test.native_asm")
        self.assertEqual("test", root.name)
        children = root.get_children(-1)
        self.assertEqual(4, len(children))
        # l-bracket
        pcl = children[0].link
        child = pcl.child
        self.assertLink(pcl, "L-BRACKET", root.object, 1, 1)
        self.assertEqual(
            [4.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0],
            pcl.extensions[0].to_array())
        self.assertDoc(child, u"l-bracket.step", u"L-BRACKET.native")
        # nba_asm
        pcl = children[1].link
        child = nba_asm = pcl.child
        self.assertLink(pcl, "NBA_ASM", root.object, 2, 3)
        self.assertDoc(child, u"NBA_ASM.step", u"NBA_ASM.native_asm")
        # bolt
        pcl = children[2].link
        child = pcl.child
        self.assertLink(pcl, "BOLT", nba_asm, 1, 1)
        self.assertDoc(child, u"bolt.step", u"BOLT.native")
        # nut
        pcl = children[3].link
        child = pcl.child
        self.assertLink(pcl, "NUT", nba_asm, 2, 1)
        self.assertDoc(child, u"nut.step", u"NUT.native")

        # check product is valid
        self.assertProduct(ctrl)
Example #21
0
    def test_attach(self):
        expected = []
        result_part = []
        result_doc = []
        for pstate, dstate, powner, downer, can_attach in self.MATRICE:
            self.part.object.state = self.states[pstate]
            self.part.object.lifecycle = self.lifecycles[pstate]
            self.doc.object.state = self.states[dstate]
            self.doc.object.lifecycle = self.lifecycles[dstate]
            self.part.set_owner(self.user if powner else self.other_owner, True)
            self.doc.set_owner(self.user if downer else self.other_owner, True)

            expected.append(can_attach)
            pctrl = PartController(self.part.object, self.user)
            result_part.append(pctrl.can_attach_document(self.doc.object))
            dctrl = DocumentController(self.doc.object, self.user)
            result_doc.append(dctrl.can_attach_part(self.part.object))
        self.assertEqual(expected, result_part)
        self.assertEqual(expected, result_doc)
Example #22
0
    def test_build_assembly(self):
        self.assertEqual(0, models.PLMObject.objects.all().count())
        ctrl = self.create("d1", "Document3D")
        natives = get_natives("test.native_asm", "NBA_ASM.native_asm",
                "NUT.native", "BOLT.native", "L-BRACKET.native")
        steps = get_steps("bolt.step", "l-bracket.step", "nut.step")
        builder = AssemblyBuilder(ctrl)
        df = builder.build_assembly(_ASSEMBLY1, natives, steps, False)

        self.assertEqual(5, models.Document.objects.all().count())
        self.assertEqual(5, models.Part.objects.all().count())
        # root
        self.assertEqual("test.native_asm", df.filename)
        root = PartController(ctrl.PartDecompose, self.user)
        self.assertDoc(root.object, "test.step", "test.native_asm")
        self.assertEqual("test", root.name)
        children = root.get_children(-1)
        self.assertEqual(4, len(children))
        # l-bracket
        pcl = children[0].link
        child = pcl.child
        self.assertLink(pcl, "L-BRACKET", root.object, 1, 1)
        self.assertEqual([4.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0],
            pcl.extensions[0].to_array())
        self.assertDoc(child, u"l-bracket.step", u"L-BRACKET.native")
        # nba_asm
        pcl = children[1].link
        child = nba_asm = pcl.child
        self.assertLink(pcl, "NBA_ASM", root.object, 2, 3)
        self.assertDoc(child, u"NBA_ASM.step", u"NBA_ASM.native_asm")
        # bolt
        pcl = children[2].link
        child = pcl.child
        self.assertLink(pcl, "BOLT", nba_asm, 1, 1)
        self.assertDoc(child, u"bolt.step", u"BOLT.native")
        # nut
        pcl = children[3].link
        child = pcl.child
        self.assertLink(pcl, "NUT", nba_asm, 2, 1)
        self.assertDoc(child, u"nut.step", u"NUT.native")

        # check product is valid
        self.assertProduct(ctrl)
Example #23
0
    def test_revise_two_childrens_post(self):
        """
        Tests a post request to revise a part with two children.
        Only one child is selected.
        """
        child1 = PartController.create("RefChild1", "Part", "a", self.user,
                                       self.DATA)
        self.controller.add_child(child1, 10, 25, "-")
        child2 = PartController.create("RefChild2", "Part", "a", self.user,
                                       self.DATA)
        self.controller.add_child(child2, 10, 55, "-")

        link1, link2 = [c.link for c in self.controller.get_children(1)]
        data = {
            "revision": "b",
            "parents-TOTAL_FORMS": "0",
            "parents-INITIAL_FORMS": "0",
            "children-TOTAL_FORMS": "1",
            "children-INITIAL_FORMS": "1",
            "children-0-selected": "on",
            "children-0-link": link1.id,
            "children-1-selected": "",
            "children-1-link": link2.id,
            "documents-TOTAL_FORMS": "0",
            "documents-INITIAL_FORMS": "0",
        }
        response = self.post(self.base_url + "revisions/", data)
        revisions = self.controller.get_next_revisions()
        self.assertEqual(1, len(revisions))
        rev = revisions[0].part
        self.assertEqual("b", rev.revision)
        # ensure the part is still a child of the old revision
        children = self.controller.get_children(1)
        self.assertEqual(set(((1, link1), (1, link2))), set(children))
        children = PartController(rev, self.user).get_children(1)
        self.assertEqual(1, len(children))

        link = children[0].link
        self.assertEqual(link1.child, link.child)
        self.assertEqual(link1.order, link.order)
        self.assertEqual(link1.quantity, link.quantity)
        self.assertEqual(link1.unit, link.unit)
Example #24
0
 def test_navigate_children(self):
     """
     Tests a navigate with the "child" option set.
     """
     data = self.DATA.copy()
     data["name"] = "Coffee"
     child1 = PartController.create("c1", "Part", "k", self.user, data,
                                    True, True)
     self.controller.add_child(child1, 15, 789, "kg")
     for osr, results in ((False, ()), (True, (child1.object, ))):
         self.get_graph_data({"child": True, OSR: osr}, results)
         self.assertCount(2, 1)
         main, child_node = self.nodes
         # check the edge
         self.assertTrue("15" in self.edges[0].text_content())
         self.assertTrue("kg" in self.edges[0].text_content())
         text = child_node.text_content().strip()
         self.assertTrue(data["name"] in text)
     # add another child to child1
     child2 = PartController.create("c2", "Part", "k", self.user, data,
                                    True, True)
     child1.add_child(child2, 15, 789, "kg")
     for osr, results in ((False, ()), (True, (child1.object,
                                               child2.object))):
         self.get_graph_data({"child": True, OSR: osr}, results)
         self.assertCount(3, 2)
     # empty graph is child1 is not found
     self.get_graph_data({"child": True, OSR: True}, (child2.object, ))
     self.assertCount(1, 0)
     # add child2 to the controller
     # we should have 3 nodes (controller, child1, child2)
     # and 3 edges (controller -> child1, controller -> child2 and
     # child1 -> child2)
     self.controller.add_child(child2, 15, 789, "kg")
     for osr, results in ((False, ()), (True, (child1.object,
                                               child2.object))):
         self.get_graph_data({"child": True, OSR: osr}, results)
         self.assertCount(3, 3)
     for result in (self.cie, self.group, self.user,
                    self.controller.object):
         self.get_graph_data({"child": True, OSR: True}, (result, ))
         self.assertCount(1, 0)
Example #25
0
    def test_attach(self):
        expected = []
        result_part = []
        result_doc = []
        for pstate, dstate, powner, downer, can_attach in self.MATRICE:
            self.part.object.state = self.states[pstate]
            self.part.object.lifecycle = self.lifecycles[pstate]
            self.doc.object.state = self.states[dstate]
            self.doc.object.lifecycle = self.lifecycles[dstate]
            self.part.set_owner(self.user if powner else self.other_owner,
                                True)
            self.doc.set_owner(self.user if downer else self.other_owner, True)

            expected.append(can_attach)
            pctrl = PartController(self.part.object, self.user)
            result_part.append(pctrl.can_attach_document(self.doc.object))
            dctrl = DocumentController(self.doc.object, self.user)
            result_doc.append(dctrl.can_attach_part(self.part.object))
        self.assertEqual(expected, result_part)
        self.assertEqual(expected, result_doc)
Example #26
0
 def test_revise_one_revised_parent_post2(self):
     """
     Tests a post request to revise a part which has one parent which has been
     revised before the bom was built.
     """
     parent = PartController.create("RefParent", "Part", "a", self.user,
                                    self.DATA)
     parent2 = parent.revise("the game")
     parent.add_child(self.controller, 10, 25, "-")
     link = parent.get_children(1)[0].link
     response = self.get(self.base_url + "revisions/")
     # checks that it is necessary to confirm the revision
     self.assertTrue(response.context["confirmation"])
     formset = response.context["parents_formset"]
     self.assertEqual(2, formset.total_form_count())
     data = {
         "revision": "b",
         "parents-TOTAL_FORMS": "2",
         "parents-INITIAL_FORMS": "2",
         "parents-0-selected": "",
         "parents-0-link": link.id,
         "parents-0-new_parent": parent.id,
         "parents-1-selected": "on",
         "parents-1-link": link.id,
         "parents-1-new_parent": parent2.id,
         "children-TOTAL_FORMS": "0",
         "children-INITIAL_FORMS": "0",
         "documents-TOTAL_FORMS": "0",
         "documents-INITIAL_FORMS": "0",
     }
     response = self.post(self.base_url + "revisions/", data)
     revisions = self.controller.get_next_revisions()
     self.assertEqual(1, len(revisions))
     rev = revisions[0].part
     self.assertEqual("b", rev.revision)
     # ensure the old revision is still a child of the parent
     children = parent.get_children(1)
     self.assertEqual(1, len(children))
     level, link2 = children[0]
     self.assertEqual(parent.id, link2.parent_id)
     self.assertEqual(link.order, link2.order)
     self.assertEqual(link.quantity, link2.quantity)
     self.assertEqual(link.unit, link2.unit)
     self.assertEqual(self.controller.id, link2.child_id)
     # ensure the new revisison is a child of the parent
     children = parent2.get_children(1)
     self.assertEqual(1, len(children))
     level, link2 = children[0]
     self.assertEqual(parent2.id, link2.parent_id)
     self.assertEqual(link.order, link2.order)
     self.assertEqual(link.quantity, link2.quantity)
     self.assertEqual(link.unit, link2.unit)
     self.assertEqual(rev.id, link2.child_id)
Example #27
0
    def test_revise_two_childrens_get(self):
        """
        Tests a get request to revise a part with two children.
        """
        child1 = PartController.create("RefChild1", "Part", "a", self.user, self.DATA)
        self.controller.add_child(child1, 10, 25, "-")
        child2 = PartController.create("RefChild2", "Part", "a", self.user, self.DATA)
        self.controller.add_child(child2, 10, 55, "-")

        response = self.get(self.base_url + "revisions/")
        # checks that it is necessary to confirm the revision
        self.assertTrue(response.context["confirmation"])
        formset = response.context["children_formset"]

        self.assertEqual(2, formset.total_form_count())
        form1, form2 = formset.forms
        self.assertTrue(form1.fields["selected"].initial)
        self.assertTrue(form1.initial["link"].child_id in (child1.id, child2.id))
        self.assertTrue(form2.fields["selected"].initial)
        self.assertTrue(form2.initial["link"].child_id in (child1.id, child2.id))
        self.assertNotEqual(form2.initial["link"], form1.initial["link"])
Example #28
0
 def get_all_geometry_files(self, doc_file):
     if self.PartDecompose is not None:
         pctrl = PartController(self.PartDecompose, self._user)
         if self._stps is None:
             children_ids = [c.link.child_id for c in pctrl.get_children(-1, related=("child__id"),
                 only=("child__id", "parent__id",))]
             if children_ids:
                 docs = pmodels.DocumentPartLink.objects.now().filter(document__type="Document3D",
                         part__in=children_ids).values_list("document", flat=True)
                 dfs = pmodels.DocumentFile.objects.filter(document__in=docs, deprecated=False)\
                         .filter(is_stp).values_list("id", flat=True)
                 self._stps = dfs
             else:
                 self._stps = pmodels.DocumentFile.objects.none().values_list("id", flat=True)
         q = Q(stp=doc_file)
         stps = list(self._stps)
         if stps:
             q |= Q(stp__in=stps)
         gfs = GeometryFile.objects.filter(q)
     else:
         gfs = GeometryFile.objects.filter(stp=doc_file)
     return gfs.values_list("file", flat=True)
Example #29
0
 def test_add_child(self):
     response = self.get(self.base_url + "BOM-child/add/", link=True)
     child1 = PartController.create("c1", "Part", "a", self.user, self.DATA)
     response = self.client.post(
         self.base_url + "BOM-child/add/", {
             "type": "Part",
             "reference": "c1",
             "revision": "a",
             "quantity": 10,
             "order": 10,
             "unit": "m"
         })
     self.assertEquals(1, len(self.controller.get_children()))
Example #30
0
 def test_navigate_children(self):
     """
     Tests a navigate with the "child" option set.
     """
     data = self.DATA.copy()
     data["name"] = "Coffee"
     child1 = PartController.create("c1", "Part", "k",
             self.user, data, True, True)
     self.controller.add_child(child1, 15, 789, "kg")
     for osr, results in ((False, ()), (True, (child1.object,))):
         self.get_graph_data({"child" : True, OSR : osr }, results)
         self.assertCount(2, 1)
         main, child_node = self.nodes
         # check the edge
         self.assertTrue("15" in self.edges[0].text_content())
         self.assertTrue("kg" in self.edges[0].text_content())
         text = child_node.text_content().strip()
         self.assertTrue(data["name"] in text)
     # add another child to child1
     child2 = PartController.create("c2", "Part", "k",
             self.user, data, True, True)
     child1.add_child(child2, 15, 789, "kg")
     for osr, results in ((False, ()), (True, (child1.object, child2.object))):
         self.get_graph_data({"child" : True, OSR : osr }, results)
         self.assertCount(3, 2)
     # empty graph is child1 is not found
     self.get_graph_data({"child" : True, OSR : True }, (child2.object,))
     self.assertCount(1, 0)
     # add child2 to the controller
     # we should have 3 nodes (controller, child1, child2)
     # and 3 edges (controller -> child1, controller -> child2 and
     # child1 -> child2)
     self.controller.add_child(child2, 15, 789, "kg")
     for osr, results in ((False, ()), (True, (child1.object, child2.object))):
         self.get_graph_data({"child" : True, OSR : osr }, results)
         self.assertCount(3, 3)
     for result in (self.cie, self.group, self.user, self.controller.object):
         self.get_graph_data({"child" : True, OSR : True }, (result,))
         self.assertCount(1, 0)
Example #31
0
    def test_revise_two_childrens_post(self):
        """
        Tests a post request to revise a part with two children.
        Only one child is selected.
        """
        child1 = PartController.create("RefChild1", "Part", "a", self.user, self.DATA)
        self.controller.add_child(child1, 10, 25, "-")
        child2 = PartController.create("RefChild2", "Part", "a", self.user, self.DATA)
        self.controller.add_child(child2, 10, 55, "-")

        link1, link2 = [c.link for c in self.controller.get_children(1)]
        data = { "revision" : "b",
                 "parents-TOTAL_FORMS" : "0",
                 "parents-INITIAL_FORMS" : "0",
                 "children-TOTAL_FORMS" : "1",
                 "children-INITIAL_FORMS" : "1",
                 "children-0-selected" : "on",
                 "children-0-link" : link1.id,
                 "children-1-selected" : "",
                 "children-1-link" : link2.id,
                 "documents-TOTAL_FORMS" : "0",
                 "documents-INITIAL_FORMS" : "0",
                 }
        response = self.post(self.base_url + "revisions/", data)
        revisions = self.controller.get_next_revisions()
        self.assertEqual(1, len(revisions))
        rev = revisions[0].part
        self.assertEqual("b", rev.revision)
        # ensure the part is still a child of the old revision
        children = self.controller.get_children(1)
        self.assertEqual(set(((1, link1), (1, link2))), set(children))
        children = PartController(rev, self.user).get_children(1)
        self.assertEqual(1, len(children))

        link = children[0].link
        self.assertEqual(link1.child, link.child)
        self.assertEqual(link1.order, link.order)
        self.assertEqual(link1.quantity, link.quantity)
        self.assertEqual(link1.unit, link.unit)
Example #32
0
 def test_revise_one_revised_parent_post2(self):
     """
     Tests a post request to revise a part which has one parent which has been
     revised before the bom was built.
     """
     parent = PartController.create("RefParent", "Part", "a", self.user, self.DATA)
     parent2 = parent.revise("the game")
     parent.add_child(self.controller, 10, 25, "-")
     link = parent.get_children(1)[0].link
     response = self.get(self.base_url + "revisions/")
     # checks that it is necessary to confirm the revision
     self.assertTrue(response.context["confirmation"])
     formset = response.context["parents_formset"]
     self.assertEqual(2, formset.total_form_count())
     data = { "revision" : "b",
              "parents-TOTAL_FORMS" : "2",
              "parents-INITIAL_FORMS" : "2",
              "parents-0-selected" : "",
              "parents-0-link" : link.id,
              "parents-0-new_parent" : parent.id,
              "parents-1-selected" : "on",
              "parents-1-link" : link.id,
              "parents-1-new_parent" : parent2.id,
              "children-TOTAL_FORMS" : "0",
              "children-INITIAL_FORMS" : "0",
              "documents-TOTAL_FORMS" : "0",
              "documents-INITIAL_FORMS" : "0",
              }
     response = self.post(self.base_url + "revisions/", data)
     revisions = self.controller.get_next_revisions()
     self.assertEqual(1, len(revisions))
     rev = revisions[0].part
     self.assertEqual("b", rev.revision)
     # ensure the old revision is still a child of the parent
     children = parent.get_children(1)
     self.assertEqual(1, len(children))
     level, link2 = children[0]
     self.assertEqual(parent.id, link2.parent_id)
     self.assertEqual(link.order, link2.order)
     self.assertEqual(link.quantity, link2.quantity)
     self.assertEqual(link.unit, link2.unit)
     self.assertEqual(self.controller.id, link2.child_id)
     # ensure the new revisison is a child of the parent
     children = parent2.get_children(1)
     self.assertEqual(1, len(children))
     level, link2 = children[0]
     self.assertEqual(parent2.id, link2.parent_id)
     self.assertEqual(link.order, link2.order)
     self.assertEqual(link.quantity, link2.quantity)
     self.assertEqual(link.unit, link2.unit)
     self.assertEqual(rev.id, link2.child_id)
Example #33
0
 def test_navigate_parents(self):
     """
     Tests a navigate with the "parents" option set.
     """
     data = self.DATA.copy()
     data["name"] = "Coffee"
     parent1 = PartController.create("c1", "Part", "k", self.user, data,
                                     True, True)
     parent1.add_child(self.controller, 15, 789, "kg")
     for osr, results in ((False, ()), (True, (parent1.object, ))):
         self.get_graph_data({"parents": True, OSR: osr}, results)
         self.assertCount(2, 1)
         main, parent_node = self.nodes
         self.assertTrue("789" in self.edges[0].text_content())
         self.assertTrue("15" in self.edges[0].text_content())
         self.assertTrue("kg" in self.edges[0].text_content())
         text = parent_node.text_content().strip()
         self.assertTrue(data["name"] in text)
     # add another parent to parent1
     parent2 = PartController.create("c2", "Part", "k", self.user, data,
                                     True, True)
     parent2.add_child(parent1, 15, 789, "kg")
     for osr, results in ((False, ()), (True, (parent1.object,
                                               parent2.object))):
         self.get_graph_data({"parents": True, OSR: osr}, results)
         self.assertCount(3, 2)
     self.get_graph_data({"parents": True, OSR: True}, (parent2.object, ))
     self.assertCount(1, 0)
     # add the controller to parent2
     parent2.add_child(self.controller, 5, 79, "kg")
     for osr, results in ((False, ()), (True, (parent1.object,
                                               parent2.object))):
         self.get_graph_data({"parents": True, OSR: osr}, results)
         self.assertCount(3, 3)
     for result in (self.cie, self.group, self.user,
                    self.controller.object):
         self.get_graph_data({"parents": True, OSR: True}, (result, ))
         self.assertCount(1, 0)
Example #34
0
 def test_revise_one_child_get(self):
     """
     Tests a get request to revise a part which has one child.
     This child must be suggested when the user revises the part.
     """
     child = PartController.create("RefChild", "Part", "a", self.user, self.DATA)
     self.controller.add_child(child, 10, 25, "-")
     response = self.get(self.base_url + "revisions/")
     # checks that it is necessary to confirm the revision
     self.assertTrue(response.context["confirmation"])
     formset = response.context["children_formset"]
     self.assertEqual(1, formset.total_form_count())
     form = formset.forms[0]
     self.assertTrue(form.fields["selected"].initial)
     self.assertEqual(child.id, form.initial["link"].child_id)
Example #35
0
 def test_plmobjects(self):
     response = self.get(self.group_url + "objects/", page="objects")
     objects = response.context["objects"]
     self.assertEqual([self.part_controller.plmobject_ptr], list(objects.object_list))
     # create a new group
     group = m.GroupInfo(name="grp2", owner=self.user, creator=self.user,
             description="grp")
     group.save()
     self.user.groups.add(group)
     # create another part which bellows to another group
     p2 = PartController.create("Part2", "Part", "a", self.user,
             dict(group=group))
     response = self.get(self.group_url + "objects/", page="objects")
     objects = response.context["objects"]
     self.assertEqual([self.part_controller.plmobject_ptr], list(objects.object_list))
Example #36
0
 def test_revise_one_child_get(self):
     """
     Tests a get request to revise a part which has one child.
     This child must be suggested when the user revises the part.
     """
     child = PartController.create("RefChild", "Part", "a", self.user,
                                   self.DATA)
     self.controller.add_child(child, 10, 25, "-")
     response = self.get(self.base_url + "revisions/")
     # checks that it is necessary to confirm the revision
     self.assertTrue(response.context["confirmation"])
     formset = response.context["children_formset"]
     self.assertEqual(1, formset.total_form_count())
     form = formset.forms[0]
     self.assertTrue(form.fields["selected"].initial)
     self.assertEqual(child.id, form.initial["link"].child_id)
Example #37
0
    def setUp(self):
        super(PartDocControllerTestCase, self).setUp()
        self.other_owner = self.get_contributor("Otherowner")
        self.other_owner.groups.add(self.group)
        self.other_owner.save()

        lcl = LifecycleList("dpop", "official", "draft", "proposed", "official", "deprecated")
        lc = models.Lifecycle.from_lifecyclelist(lcl)
        self.states = dict((s, models.State.objects.get(name=s)) for s in lcl)
        self.states["cancelled"] = models.get_cancelled_state()
        self.lifecycles = dict.fromkeys(lcl, lc)
        self.lifecycles["cancelled"] = models.get_cancelled_lifecycle()
        data = self.DATA.copy()
        data["lifecycle"] = lc
        self.part = PartController.create("p1", "Part", "a", self.user, data, True, True)
        self.doc = DocumentController.create("d1", "Document", "a", self.user, data, True, True)
Example #38
0
 def test_navigate_documents2(self):
     """
     Tests a navigate with the "doc" and "child" options set, both
     parts are attached to the same document.
     """
     data = self.DATA.copy()
     data["name"] = "Coffee"
     child1 = PartController.create("c1", "Part", "k", self.user, data,
                                    True, True)
     self.controller.add_child(child1, 4, 8, "m")
     doc = DocumentController.create("doc", "Document", "d", self.user,
                                     data, True, True)
     self.controller.attach_to_document(doc)
     child1.attach_to_document(doc)
     for osr, results in ((False, ()), (True, (doc.object, child1.object))):
         self.get_graph_data({"doc": True, "child": True})
         self.assertCount(3, 3)
Example #39
0
 def test_navigate_documents2(self):
     """
     Tests a navigate with the "doc" and "child" options set, both
     parts are attached to the same document.
     """
     data = self.DATA.copy()
     data["name"] = "Coffee"
     child1 = PartController.create("c1", "Part", "k",
             self.user, data, True, True)
     self.controller.add_child(child1, 4, 8, "m")
     doc = DocumentController.create("doc", "Document", "d",
             self.user, data, True, True)
     self.controller.attach_to_document(doc)
     child1.attach_to_document(doc)
     for osr, results in ((False, ()), (True, (doc.object, child1.object))):
         self.get_graph_data({"doc" : True, "child" : True})
         self.assertCount(3, 3)
Example #40
0
 def test_revise_one_revised_parent_get(self):
     """
     Tests a get request to revise a part which has one parent which has been
     revised.
     """
     parent = PartController.create("RefParent", "Part", "a", self.user, self.DATA)
     parent.add_child(self.controller, 10, 25, "-")
     parent2 = parent.revise("the game")
     response = self.get(self.base_url + "revisions/")
     # checks that it is necessary to confirm the revision
     self.assertTrue(response.context["confirmation"])
     formset = response.context["parents_formset"]
     self.assertEqual(1, formset.total_form_count())
     form = formset.forms[0]
     self.assertFalse(form.fields["selected"].initial)
     self.assertEqual(parent2.id, form.initial["link"].parent_id)
     self.assertEqual(parent2.id, form.initial["new_parent"].id)
Example #41
0
 def test_navigate_part(self):
     """
     Tests a navigate with the "doc" option set.
     """
     data = self.DATA.copy()
     data["name"] = "Coffee"
     part = PartController.create("part", "Part", "d",
             self.user, data, True, True)
     self.controller.attach_to_part(part)
     for osr, results in ((False, ()), (True, (part.object,))):
         self.get_graph_data({"part" : True, OSR: osr}, results)
         self.assertCount(2, 1)
         main, part_node = self.nodes
         text = part_node.text_content().strip()
         self.assertTrue(data["name"] in text)
     for result in (self.cie, self.group, self.user, self.controller.object):
         self.get_graph_data({"part" : True, OSR : True }, (result,))
         self.assertCount(1, 0)
Example #42
0
 def test_revise_one_revised_parent_get(self):
     """
     Tests a get request to revise a part which has one parent which has been
     revised.
     """
     parent = PartController.create("RefParent", "Part", "a", self.user,
                                    self.DATA)
     parent.add_child(self.controller, 10, 25, "-")
     parent2 = parent.revise("the game")
     response = self.get(self.base_url + "revisions/")
     # checks that it is necessary to confirm the revision
     self.assertTrue(response.context["confirmation"])
     formset = response.context["parents_formset"]
     self.assertEqual(1, formset.total_form_count())
     form = formset.forms[0]
     self.assertFalse(form.fields["selected"].initial)
     self.assertEqual(parent2.id, form.initial["link"].parent_id)
     self.assertEqual(parent2.id, form.initial["new_parent"].id)
Example #43
0
 def test_navigate_part(self):
     """
     Tests a navigate with the "doc" option set.
     """
     data = self.DATA.copy()
     data["name"] = "Coffee"
     part = PartController.create("part", "Part", "d", self.user, data,
                                  True, True)
     self.controller.attach_to_part(part)
     for osr, results in ((False, ()), (True, (part.object, ))):
         self.get_graph_data({"part": True, OSR: osr}, results)
         self.assertCount(2, 1)
         main, part_node = self.nodes
         text = part_node.text_content().strip()
         self.assertTrue(data["name"] in text)
     for result in (self.cie, self.group, self.user,
                    self.controller.object):
         self.get_graph_data({"part": True, OSR: True}, (result, ))
         self.assertCount(1, 0)
Example #44
0
    def setUp(self):
        super(PartDocControllerTestCase, self).setUp()
        self.other_owner = self.get_contributor("Otherowner")
        self.other_owner.groups.add(self.group)
        self.other_owner.save()

        lcl = LifecycleList("dpop", "official", "draft", "proposed",
                            "official", "deprecated")
        lc = models.Lifecycle.from_lifecyclelist(lcl)
        self.states = dict((s, models.State.objects.get(name=s)) for s in lcl)
        self.states["cancelled"] = models.get_cancelled_state()
        self.lifecycles = dict.fromkeys(lcl, lc)
        self.lifecycles["cancelled"] = models.get_cancelled_lifecycle()
        data = self.DATA.copy()
        data["lifecycle"] = lc
        self.part = PartController.create("p1", "Part", "a", self.user, data,
                                          True, True)
        self.doc = DocumentController.create("d1", "Document", "a", self.user,
                                             data, True, True)
Example #45
0
 def test_select_pdf_chidlren_part_pdf(self):
     child = PartController.create("Child", "Part", "f",
             self.user, self.DATA, True, True)
     self.doc.attach_to_part(child)
     self.controller.add_child(child, 1, 1, 'm')
     df = self.doc.add_file(self.get_file("hello.pdf", data=PDF))
     prefix = "pdf_%d_%d" % (self.controller.get_children()[0].link.id,
             self.doc.id)
     data = {
             "Download" : "download",
             prefix + '-TOTAL_FORMS': '1',
             prefix + '-INITIAL_FORMS': '1',
             prefix + '-0-id' : df.id,
             prefix + '-0-document' : self.doc.id,
             prefix + '-0-selected' : 'on',
             }
     response = self.client.get(self.base_url + "pdf/", data=data)
     content = self.check_pdf(response, 2)
     self.assertTrue("world" in content)
Example #46
0
 def test_plmobjects(self):
     response = self.get(self.group_url + "objects/", page="objects")
     objects = response.context["objects"]
     self.assertEqual([self.part_controller.plmobject_ptr],
                      list(objects.object_list))
     # create a new group
     group = m.GroupInfo(name="grp2",
                         owner=self.user,
                         creator=self.user,
                         description="grp")
     group.save()
     self.user.groups.add(group)
     # create another part which bellows to another group
     p2 = PartController.create("Part2", "Part", "a", self.user,
                                dict(group=group))
     response = self.get(self.group_url + "objects/", page="objects")
     objects = response.context["objects"]
     self.assertEqual([self.part_controller.plmobject_ptr],
                      list(objects.object_list))
Example #47
0
 def _add_part(self, doc, name):
     data = {
         "lifecycle": self.controller.lifecycle,
         "group": self.controller.group,
         "name": name,
     }
     ref = get_new_reference(self.controller._user, Part,
                             len(self.created_parts), self._inbulk_cache)
     part = PartController.create(ref, "Part", "a", self.controller._user, data,
             not self._send_mails, True)
     self._parts[name] = part
     self._parts[part.id] = part
     doc.attach_to_part(part)
     doc.object.PartDecompose = part.object
     doc.object.save()
     self.created_parts.append(part)
     if self._send_mails:
         part.block_mails()
     return part
Example #48
0
    def test_children_last_level(self):
        """
        Tests the children view, shows only the last level.

        self
         -> c1
             -> c4
                 -> c6
             -> c5
         -> c2
         -> c3
             -> c7
             -> c8

        last level: (c4 -> c6), (c1 -> c5), (self -> c2), (c3 -> c7), (c3 -> c8)
        """
        child1 = PartController.create("c1", "Part", "a", self.user, self.DATA)
        ls1 = self.controller.add_child(child1, 10, 20)
        child2 = PartController.create("c2", "Part", "a", self.user, self.DATA)
        ls2 = self.controller.add_child(child2, 10, 21)
        child3 = PartController.create("c3", "Part", "a", self.user, self.DATA)
        self.controller.add_child(child3, 10, 22)
        child4 = PartController.create("c4", "Part", "a", self.user, self.DATA)
        l14 = child1.add_child(child4, 10, 23)
        child5 = PartController.create("c5", "Part", "a", self.user, self.DATA)
        l15 = child1.add_child(child5, 10, 24)
        child6 = PartController.create("c6", "Part", "a", self.user, self.DATA)
        l46 = child4.add_child(child6, 10, 25)
        child7 = PartController.create("c7", "Part", "a", self.user, self.DATA)
        l37 = child3.add_child(child7, 10, 26)
        child8 = PartController.create("c8", "Part", "a", self.user, self.DATA)
        l38 = child3.add_child(child8, 10, 27)
        response = self.get(self.base_url + "BOM-child/", {
            "level": "last",
            "state": "all"
        },
                            page="BOM-child")
        children = response.context["children"]
        self.assertEqual(5, len(children))
        self.assertEqual([l46, l15, ls2, l37, l38], [c.link for c in children])
Example #49
0
 def test_edit_children(self):
     child1 = PartController.create("c1", "Part", "a", self.user, self.DATA)
     self.controller.add_child(child1, 10, 20)
     response = self.get(self.base_url + "BOM-child/edit/")
     formset = response.context["children_formset"]
     data = {
         'form-TOTAL_FORMS': u'1',
         'form-INITIAL_FORMS': u'1',
         'form-MAX_NUM_FORMS': u'',
         'form-0-child': child1.id,
         'form-0-id': self.controller.get_children()[0].link.id,
         'form-0-order': 45,
         'form-0-parent': self.controller.id,
         'form-0-quantity': '45.0',
         'form-0-unit': 'cm',
     }
     response = self.post(self.base_url + "BOM-child/edit/", data)
     link = self.controller.get_children()[0].link
     self.assertEquals(45, link.order)
     self.assertEquals(45.0, link.quantity)
     self.assertEquals('cm', link.unit)
Example #50
0
 def test_edit_children(self):
     child1 = PartController.create("c1", "Part", "a", self.user, self.DATA)
     self.controller.add_child(child1, 10, 20)
     response = self.get(self.base_url + "BOM-child/edit/")
     formset = response.context["children_formset"]
     data = {
         "form-TOTAL_FORMS": u"1",
         "form-INITIAL_FORMS": u"1",
         "form-MAX_NUM_FORMS": u"",
         "form-0-child": child1.id,
         "form-0-id": self.controller.get_children()[0].link.id,
         "form-0-order": 45,
         "form-0-parent": self.controller.id,
         "form-0-quantity": "45.0",
         "form-0-unit": "cm",
     }
     response = self.post(self.base_url + "BOM-child/edit/", data)
     link = self.controller.get_children()[0].link
     self.assertEquals(45, link.order)
     self.assertEquals(45.0, link.quantity)
     self.assertEquals("cm", link.unit)
Example #51
0
 def test_edit_children(self):
     child1 = PartController.create("c1", "Part", "a", self.user, self.DATA)
     self.controller.add_child(child1, 10 , 20)
     response = self.get(self.base_url + "BOM-child/edit/")
     formset = response.context["children_formset"]
     data = {
         'form-TOTAL_FORMS': u'1',
         'form-INITIAL_FORMS': u'1',
         'form-MAX_NUM_FORMS': u'',
         'form-0-child' :   child1.id,
         'form-0-id'  : self.controller.get_children()[0].link.id,
         'form-0-order'  :  45,
         'form-0-parent' :  self.controller.id,
         'form-0-quantity' :  '45.0',
         'form-0-unit' :  'cm',
     }
     response = self.post(self.base_url + "BOM-child/edit/", data)
     link = self.controller.get_children()[0].link
     self.assertEquals(45, link.order)
     self.assertEquals(45.0, link.quantity)
     self.assertEquals('cm', link.unit)
Example #52
0
    def test_children_last_level(self):
        """
        Tests the children view, shows only the last level.

        self
         -> c1
             -> c4
                 -> c6
             -> c5
         -> c2
         -> c3
             -> c7
             -> c8

        last level: (c4 -> c6), (c1 -> c5), (self -> c2), (c3 -> c7), (c3 -> c8)
        """
        child1 = PartController.create("c1", "Part", "a", self.user, self.DATA)
        ls1 = self.controller.add_child(child1, 10 , 20)
        child2 = PartController.create("c2", "Part", "a", self.user, self.DATA)
        ls2 = self.controller.add_child(child2, 10, 21)
        child3 = PartController.create("c3", "Part", "a", self.user, self.DATA)
        self.controller.add_child(child3, 10, 22)
        child4 = PartController.create("c4", "Part", "a", self.user, self.DATA)
        l14 = child1.add_child(child4, 10, 23)
        child5 = PartController.create("c5", "Part", "a", self.user, self.DATA)
        l15 = child1.add_child(child5, 10, 24)
        child6 = PartController.create("c6", "Part", "a", self.user, self.DATA)
        l46 = child4.add_child(child6, 10, 25)
        child7 = PartController.create("c7", "Part", "a", self.user, self.DATA)
        l37 = child3.add_child(child7, 10, 26)
        child8 = PartController.create("c8", "Part", "a", self.user, self.DATA)
        l38 = child3.add_child(child8, 10, 27)
        response = self.get(self.base_url + "BOM-child/",
                {"level":"last", "state" : "all"},
                page="BOM-child")
        children = response.context["children"]
        self.assertEqual(5, len(children))
        self.assertEqual([l46, l15, ls2, l37, l38], [c.link for c in children])
Example #53
0
 def test_revise_one_parent_post_selected(self):
     """
     Tests a post request to revise a part which has one parent.
     This parent is selected, and so its bom must be updated.
     """
     parent = PartController.create("RefParent", "Part", "a", self.user,
                                    self.DATA)
     parent.add_child(self.controller, 10, 25, "-")
     link = parent.get_children(1)[0].link
     data = {
         "revision": "b",
         "parents-TOTAL_FORMS": "1",
         "parents-INITIAL_FORMS": "1",
         "parents-0-selected": "on",
         "parents-0-link": link.id,
         "parents-0-new_parent": parent.id,
         "children-TOTAL_FORMS": "0",
         "children-INITIAL_FORMS": "0",
         "documents-TOTAL_FORMS": "0",
         "documents-INITIAL_FORMS": "0",
     }
     response = self.post(self.base_url + "revisions/", data)
     revisions = self.controller.get_next_revisions()
     self.assertEqual(1, len(revisions))
     rev = revisions[0].part
     self.assertEqual("b", rev.revision)
     # ensure the old revision is still a child of the parent
     children = parent.get_children(1)
     self.assertNotEqual([(1, link)], children)
     self.assertEqual(1, len(children))
     level, link2 = children[0]
     self.assertEqual(parent.id, link2.parent_id)
     self.assertEqual(link.order, link2.order)
     self.assertEqual(link.quantity, link2.quantity)
     self.assertEqual(link.unit, link2.unit)
     self.assertEqual(rev.id, link2.child_id)
     self.assertFalse(self.controller.get_parents())
Example #54
0
 def get_part(self, ref="P1"):
     return PartController.create(ref, "Part", "a", self.user, self.DATA,
                                  True, True)
Example #55
0
 def test_add_related_part_post(self):
     part = PartController.create("RefPart", "Part", "a", self.user, self.DATA)
     data = {"reference": part.reference, "type": part.type, "revision": part.revision}
     response = self.post(self.base_url + "parts/add/", data)
     self.assertEqual([part.id], [p.part.id for p in self.controller.get_attached_parts()])
Example #56
0
    def get_product(self, doc_file, recursive=False):
        """
        Returns the :class:`.Product` associated to *doc_file*.
        If *recursive* is True, it returns a complet product, built by browsing
        the BOM of the attached part, if it has been decomposed.
        """
        try:
            af = ArbreFile.objects.get(stp=doc_file)
        except:
            return None
        product = classes.Product.from_list(json.loads(af.file.read()))
        if recursive and product:
            if self.PartDecompose is not None:
                # Here be dragons
                # this code try to reduce the number of database queries:
                # h queries (h: height of the BOM) to get children
                # + 1 query to doc-part links
                # + 1 query to get STP files
                # + 1 query to get location links
                # + 1 query to get ArbreFile
                pctrl = PartController(self.PartDecompose, self._user)
                children = pctrl.get_children(-1,
                                              related=("child__id"),
                                              only=(
                                                  "child__id",
                                                  "parent__id",
                                              ))
                if not children:
                    return product
                links, children_ids = zip(*[(c.link.id, c.link.child_id)
                                            for c in children])
                docs = []
                part_to_docs = defaultdict(list)
                for doc, part in pmodels.DocumentPartLink.current_objects.filter(
                        document__type="Document3D",
                        part__in=children_ids).values_list(
                            "document", "part").order_by("-ctime"):
                    # order by -ctime to test the most recently attached document first
                    part_to_docs[part].append(doc)
                    docs.append(doc)
                if not docs:
                    return product

                dfs = dict(pmodels.DocumentFile.objects.filter(document__in=docs, deprecated=False)\
                        .filter(is_stp).values_list("document", "id"))
                # cache this values as it may be useful for get_all_geometry_files
                self._stps = dfs.values()
                locs = defaultdict(list)
                for l in Location_link.objects.filter(link__in=links):
                    locs[l.link_id].append(l)
                # read all jsons files
                jsons = {}
                for af in ArbreFile.objects.filter(stp__in=dfs.values()):
                    jsons[af.stp_id] = json.loads(af.file.read())
                # browse the BOM and build product
                previous_level = 0
                products = [product]
                for level, link in children:
                    if level <= previous_level:
                        del products[level:]
                    stp = None
                    for doc in part_to_docs[link.child_id]:
                        if doc in dfs:
                            stp = dfs[doc]
                            break
                    if stp is not None and stp in jsons:
                        pr = products[-1]
                        prod = classes.Product.from_list(
                            jsons[stp],
                            product=False,
                            product_root=product,
                            deep=level,
                            to_update_product_root=pr)
                        for location in locs[link.id]:
                            pr.links[-1].add_occurrence(
                                location.name, location)
                        products.append(prod)
                    previous_level = level

        return product