Exemple #1
0
 def test_csv_upload(self):
     self.assertEqual(
         [(i.name, i.category or u"") for i in Location.objects.all()],
         [
             (u"All locations", u""),
             (u"factory 1", u""),
             (u"factory 2", u""),
         ],  # Test result is different in Enterprise Edition
     )
     try:
         data = tempfile.NamedTemporaryFile(mode="w+b")
         data.write(b"name,category\n")
         data.write(b"factory 3,cat1\n")
         data.write(b"factory 4,\n")
         data.seek(0)
         response = self.client.post("/data/input/location/", {"csv_file": data})
         checkResponse(self, response)
     finally:
         data.close()
     self.assertEqual(
         [(i.name, i.category or u"") for i in Location.objects.order_by("name")],
         [
             (u"All locations", u""),
             (u"factory 1", u""),
             (u"factory 2", u""),
             (u"factory 3", u"cat1"),
             (u"factory 4", u""),
         ],  # Test result is different in Enterprise Edition
     )
Exemple #2
0
 def test_output_manufacturing_orders(self):
     response = self.client.get("/operation/?format=json")
     self.assertContains(response, '"records":0,')
     self.assertEqual(response.status_code, 200)
     response = self.client.get("/operation/?format=csvtable")
     checkResponse(self, response)
     self.assertTrue(
         response.__getitem__("Content-Type").startswith(
             "text/csv; charset="))
     response = self.client.get("/operation/?format=spreadsheetlist")
     checkResponse(self, response)
     self.assertTrue(
         response.__getitem__("Content-Type").startswith(
             "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
         ))
Exemple #3
0
 def test_output_demand(self):
     response = self.client.get("/demand/")
     self.assertContains(response, "Demand report")
     self.assertEqual(response.status_code, 200)
     response = self.client.get("/demand/?format=csvlist")
     checkResponse(self, response)
     self.assertTrue(
         response.__getitem__("Content-Type").startswith(
             "text/csv; charset="))
     response = self.client.get("/demand/?format=spreadsheettable")
     checkResponse(self, response)
     self.assertTrue(
         response.__getitem__("Content-Type").startswith(
             "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
         ))
Exemple #4
0
    def test_api_customer(self):
        response = self.client.get("/api/input/customer/")
        checkResponse(self, response)
        recordsnumber = Customer.objects.count()
        self.assertEqual(
            Customer.objects.count(), 3
        )  # Different between Enterprise Edition and Community Edition
        response = self.client.options("/api/input/customer/")
        checkResponse(self, response)
        data = {"name": "Customer near Area 51"}
        response = self.client.post("/api/input/customer/", data)
        self.assertEqual(response.status_code, 201)
        self.assertEqual(Customer.objects.count(), recordsnumber + 1)
        self.assertEqual(
            Customer.objects.filter(name="Customer near Area 51").count(), 1
        )
        data = {"name": "Customer near Area 52"}
        response = self.client.post("/api/input/customer/", data, format="json")
        self.assertEqual(response.status_code, 201)
        self.assertEqual(Customer.objects.count(), recordsnumber + 2)
        self.assertEqual(
            Customer.objects.filter(name="Customer near Area 52").count(), 1
        )
        data = [
            {"name": "Customer near Area 99", "source": "TEST DELETE"},
            {"name": "Customer near Area 100", "source": "TEST DELETE"},
        ]
        response = self.client.post("/api/input/customer/", data, format="json")
        self.assertEqual(response.status_code, 201)
        self.assertEqual(Customer.objects.count(), recordsnumber + 4)
        self.assertEqual(Customer.objects.filter(source="TEST DELETE").count(), 2)

        # Customer GET MULTIPART
        response = self.client.get("/api/input/customer/Customer near Area 51/")
        checkResponse(self, response)
        self.assertEqual(
            Customer.objects.filter(name="Customer near Area 51").count(), 1
        )
        # Customer OPTIONS
        response = self.client.options("/api/input/customer/Customer near Area 51/")
        checkResponse(self, response)
        # Customer GET JSON tests
        response = self.client.get(
            "/api/input/customer/Customer near Area 52/", format="json"
        )
        checkResponse(self, response)
        self.assertEqual(
            Customer.objects.filter(name="Customer near Area 52").count(), 1
        )
        # Customer PUT MULTIPART tests
        data = {"name": "Customer near Area 51", "description": "Patch multipart"}
        response = self.client.patch("/api/input/customer/Customer near Area 51/", data)
        checkResponse(self, response)
        self.assertEqual(Customer.objects.count(), recordsnumber + 4)
        self.assertEqual(
            Customer.objects.filter(description="Patch multipart").count(), 1
        )
        # Customer PUT JSON tests
        data = {"name": "Customer near Area 52", "description": "Patch json"}
        response = self.client.patch(
            "/api/input/customer/Customer near Area 52/", data, format="json"
        )
        checkResponse(self, response)
        self.assertEqual(Customer.objects.count(), recordsnumber + 4)
        self.assertEqual(Customer.objects.filter(description="Patch json").count(), 1)

        # Customer PUT FORM tests
        data = {
            "name": "Customer near Area 52",
            "description": "Patch json",
            "category": None,
            "subcategory": None,
            "source": "Put json",
            "lastmodified": "2015-12-04T10:18:40.048861",
        }

        response = self.client.patch(
            "/api/input/customer/Customer near Area 52/", data, format="json"
        )
        checkResponse(self, response)
        self.assertEqual(Customer.objects.count(), recordsnumber + 4)
        self.assertEqual(Customer.objects.filter(source="Put json").count(), 1)

        # Customer bulk filtered GET test
        response = self.client.get(
            "/api/input/customer/?name__contains=Area", format="json"
        )
        checkResponse(self, response)
        self.assertEqual(Customer.objects.filter(name__contains="Area").count(), 4)

        # Customer DELETE tests
        # Bulk "contains" filtered DELETE
        response = self.client.delete(
            "/api/input/customer/?name__contains=Area 5", format="form"
        )
        self.assertEqual(response.status_code, 204)
        self.assertEqual(Customer.objects.filter(name__contains="Area").count(), 2)
        # Single DELETE
        response = self.client.delete(
            "/api/input/customer/Customer near factory 1/", format="api"
        )
        self.assertEqual(response.status_code, 204)
        # Bulk filtered DELETE
        response = self.client.delete(
            "/api/input/customer/?source=TEST DELETE", format="json"
        )
        self.assertEqual(response.status_code, 204)
        self.assertEqual(Customer.objects.filter(source="TEST DELETE").count(), 0)
Exemple #5
0
    def test_api_demand(self):
        response = self.client.get("/api/input/demand/")
        checkResponse(self, response)
        response = self.client.options("/api/input/demand/")
        checkResponse(self, response)
        recordsnumber = Demand.objects.count()
        data = {
            "name": "Order UFO 25",
            "description": None,
            "category": None,
            "subcategory": None,
            "item": "product",
            "customer": "Customer near factory 1",
            "location": "factory 1",
            "due": "2013-12-01T00:00:00",
            "status": "closed",
            "operation": None,
            "quantity": "110.0000",
            "priority": 1,
            "minshipment": None,
            "maxlateness": None,
        }
        response = self.client.post("/api/input/demand/", data, format="json")
        self.assertEqual(response.status_code, 201)
        self.assertEqual(Demand.objects.count(), recordsnumber + 1)
        self.assertEqual(Demand.objects.filter(name="Order UFO 25").count(), 1)
        data = {
            "name": "Order UFO 26",
            "description": None,
            "category": None,
            "subcategory": None,
            "item": "product",
            "customer": "Customer near factory 1",
            "location": "factory 1",
            "due": "2013-12-01T00:00:00",
            "status": "closed",
            "operation": None,
            "quantity": "220.0000",
            "priority": 1,
            "minshipment": None,
            "maxlateness": None,
        }
        response = self.client.post("/api/input/demand/", data, format="json")
        self.assertEqual(response.status_code, 201)
        self.assertEqual(Demand.objects.count(), recordsnumber + 2)
        self.assertEqual(Demand.objects.filter(name="Order UFO 26").count(), 1)

        data = [
            {
                "name": "Order UFO 27",
                "description": None,
                "category": "TEST DELETE",
                "subcategory": None,
                "item": "product",
                "location": "factory 1",
                "customer": "Customer near factory 1",
                "due": "2013-12-01T00:00:00",
                "status": "closed",
                "operation": None,
                "quantity": "220.0000",
                "priority": 1,
                "minshipment": None,
                "maxlateness": None,
            },
            {
                "name": "Order UFO 28",
                "description": None,
                "category": "TEST DELETE",
                "subcategory": None,
                "item": "product",
                "customer": "Customer near factory 1",
                "location": "factory 1",
                "due": "2013-12-01T00:00:00",
                "status": "closed",
                "operation": None,
                "quantity": "220.0000",
                "priority": 1,
                "minshipment": None,
                "maxlateness": None,
            },
        ]
        response = self.client.post("/api/input/demand/", data, format="json")
        self.assertEqual(response.status_code, 201)
        self.assertEqual(Demand.objects.count(), recordsnumber + 4)
        self.assertEqual(Demand.objects.filter(category="TEST DELETE").count(), 2)

        # Demand GET MULTIPART
        response = self.client.get("/api/input/demand/Order UFO 25/")
        checkResponse(self, response)
        self.assertEqual(Demand.objects.filter(name="Order UFO 25").count(), 1)
        # Demand OPTIONS
        response = self.client.options("/api/input/demand/Order UFO 25/")
        checkResponse(self, response)
        # Demand GET JSON tests
        response = self.client.get("/api/input/demand/Order UFO 26/", format="json")
        checkResponse(self, response)
        self.assertEqual(Demand.objects.filter(name="Order UFO 26").count(), 1)
        # Demand PUT MULTIPART tests
        data = {
            "name": "Order UFO 25",
            "description": "Put multipart",
            "category": None,
            "subcategory": None,
            "item": "product",
            "customer": "Customer near factory 1",
            "location": "factory 1",
            "due": "2013-12-01T00:00:00",
            "status": "closed",
            "operation": None,
            "quantity": "110.0000",
            "priority": 1,
            "minshipment": None,
            "maxlateness": None,
        }
        response = self.client.put(
            "/api/input/demand/Order UFO 25/", data, format="json"
        )
        checkResponse(self, response)
        self.assertEqual(Demand.objects.count(), 18)
        self.assertEqual(Demand.objects.filter(description="Put multipart").count(), 1)
        # Demand PUT JSON tests
        data = {
            "name": "Order UFO 26",
            "description": "Put json",
            "category": None,
            "subcategory": None,
            "item": "product",
            "customer": "Customer near factory 1",
            "location": "factory 1",
            "due": "2013-12-01T00:00:00",
            "status": "closed",
            "operation": None,
            "quantity": "110.0000",
            "priority": 1,
            "minshipment": None,
            "maxlateness": None,
        }
        response = self.client.put(
            "/api/input/demand/Order UFO 26/", data, format="json"
        )
        checkResponse(self, response)
        self.assertEqual(Demand.objects.count(), recordsnumber + 4)
        self.assertEqual(Demand.objects.filter(description="Put json").count(), 1)
        # Demand PUT FORM tests
        data = {
            "name": "Order UFO 26",
            "description": "Put form",
            "category": None,
            "subcategory": None,
            "item": "product",
            "customer": "Customer near factory 1",
            "location": "factory 1",
            "due": "2013-12-01T00:00:00",
            "status": "closed",
            "operation": None,
            "quantity": "110.0000",
            "priority": 1,
            "minshipment": None,
            "maxlateness": None,
        }
        response = self.client.put(
            "/api/input/demand/Order UFO 26/", data, format="json"
        )
        checkResponse(self, response)
        self.assertEqual(Demand.objects.count(), recordsnumber + 4)
        self.assertEqual(Demand.objects.filter(description="Put form").count(), 1)

        # Demand DELETE tests
        response = self.client.delete("/api/input/demand/Order UFO 26/", format="form")
        self.assertEqual(response.status_code, 204)
        response = self.client.delete("/api/input/demand/Order UFO 25/", format="json")
        self.assertEqual(response.status_code, 204)
        response = self.client.delete("/api/input/demand/Demand 01/", format="api")
        self.assertEqual(response.status_code, 204)
        response = self.client.delete(
            "/api/input/demand/?category=TEST DELETE", format="api"
        )
        self.assertEqual(response.status_code, 204)
        self.assertEqual(Customer.objects.filter(category="TEST DELETE").count(), 0)
Exemple #6
0
    def test_api_listpages_getapi(self):
        response = self.client.get("/api/")
        checkResponse(self, response)

        response = self.client.get("/api/input/demand/")
        checkResponse(self, response)

        response = self.client.get("/api/input/item/")
        checkResponse(self, response)

        response = self.client.get("/api/input/customer/")
        checkResponse(self, response)

        response = self.client.get("/api/input/location/")
        checkResponse(self, response)

        response = self.client.get("/api/input/buffer/")
        checkResponse(self, response)

        response = self.client.get("/api/input/resource/")
        checkResponse(self, response)

        response = self.client.get("/api/input/skill/")
        checkResponse(self, response)

        response = self.client.get("/api/input/resourceskill/")
        checkResponse(self, response)

        response = self.client.get("/api/input/setupmatrix/")
        checkResponse(self, response)

        response = self.client.get("/api/input/purchaseorder/")
        checkResponse(self, response)

        response = self.client.get("/api/input/supplier/")
        checkResponse(self, response)

        response = self.client.get("/api/input/itemsupplier/")
        checkResponse(self, response)

        response = self.client.get("/api/input/distributionorder/")
        checkResponse(self, response)

        response = self.client.get("/api/input/itemdistribution/")
        checkResponse(self, response)

        response = self.client.get("/api/input/manufacturingorder/")
        checkResponse(self, response)

        response = self.client.get("/api/input/calendar/")
        checkResponse(self, response)

        response = self.client.get("/api/input/calendarbucket/")
        checkResponse(self, response)

        response = self.client.get("/api/input/operation/")
        checkResponse(self, response)

        response = self.client.get("/api/input/operationmaterial/")
        checkResponse(self, response)

        response = self.client.get("/api/input/operationresource/")
        checkResponse(self, response)

        response = self.client.get("/api/input/suboperation/")
        checkResponse(self, response)

        response = self.client.get("/api/common/parameter/")
        checkResponse(self, response)

        response = self.client.get("/api/common/bucket/")
        checkResponse(self, response)

        response = self.client.get("/api/common/bucketdetail/")
        checkResponse(self, response)
Exemple #7
0
    def run_workbook(self, language):
        # Change the language preference
        self.client.post(
            "/preferences/", {"pagesize": 100, "language": language, "theme": "orange"}
        )

        # Initial size
        countBuffer = Buffer.objects.count()
        countCalendarBucket = CalendarBucket.objects.count()
        countCalendar = Calendar.objects.count()
        countCustomer = Customer.objects.count()
        countDemand = Demand.objects.count()
        countOperationMaterial = OperationMaterial.objects.count()
        countItem = Item.objects.count()
        countItemSupplier = ItemSupplier.objects.count()
        countItemDistribution = ItemDistribution.objects.count()
        countOperationResource = OperationResource.objects.count()
        countLocation = Location.objects.count()
        countPurchaseOrder = PurchaseOrder.objects.count()
        countDistributionOrder = DistributionOrder.objects.count()
        countManufacturingOrder = ManufacturingOrder.objects.count()
        countOperation = Operation.objects.count()
        countResourceSkill = ResourceSkill.objects.count()
        countResource = Resource.objects.count()
        countSetupMatrix = SetupMatrix.objects.count()
        countSkill = Skill.objects.count()
        countSubOperation = SubOperation.objects.count()
        countSupplier = Supplier.objects.count()
        countBucket = Bucket.objects.count()
        countBucketDetail = BucketDetail.objects.count()
        countParameter = Parameter.objects.count()
        self.assertTrue(countDemand > 0)

        # Export workbook
        response = self.client.post(
            "/execute/launch/exportworkbook/",
            {
                "entities": [
                    "input.demand",
                    "input.item",
                    "input.customer",
                    "input.location",
                    "input.buffer",
                    "input.resource",
                    "input.skill",
                    "input.resourceskill",
                    "input.setupmatrix",
                    "input.purchaseorder",
                    "input.supplier",
                    "input.itemsupplier",
                    "input.distributionorder",
                    "input.itemdistribution",
                    "input.operationmaterial",
                    "input.manufacturingorder",
                    "input.calendar",
                    "input.calendarbucket",
                    "input.operation",
                    "input.operationplanmaterial",
                    "input.operationresource",
                    "input.suboperation",
                    "common.parameter",
                    "common.bucket",
                    "common.bucketdetail",
                ]
            },
        )
        with open("workbook.xlsx", "wb") as f:
            f.write(response.content)

        # Erase the database
        management.call_command("empty")
        self.assertEqual(Buffer.objects.count(), 0)
        self.assertEqual(CalendarBucket.objects.count(), 0)
        self.assertEqual(Calendar.objects.count(), 0)
        self.assertEqual(Customer.objects.count(), 0)
        self.assertEqual(Demand.objects.count(), 0)
        self.assertEqual(OperationMaterial.objects.count(), 0)
        self.assertEqual(Item.objects.count(), 0)
        self.assertEqual(ItemDistribution.objects.count(), 0)
        self.assertEqual(ItemSupplier.objects.count(), 0)
        self.assertEqual(OperationResource.objects.count(), 0)
        self.assertEqual(Location.objects.count(), 0)
        self.assertEqual(PurchaseOrder.objects.count(), 0)
        self.assertEqual(DistributionOrder.objects.count(), 0)
        self.assertEqual(ManufacturingOrder.objects.count(), 0)
        self.assertEqual(OperationPlanResource.objects.count(), 0)
        self.assertEqual(OperationPlanMaterial.objects.count(), 0)
        self.assertEqual(Operation.objects.count(), 0)
        self.assertEqual(ResourceSkill.objects.count(), 0)
        self.assertEqual(Resource.objects.count(), 0)
        self.assertEqual(SetupMatrix.objects.count(), 0)
        self.assertEqual(Skill.objects.count(), 0)
        self.assertEqual(SubOperation.objects.count(), 0)
        self.assertEqual(Supplier.objects.count(), 0)
        self.assertEqual(Bucket.objects.count(), 0)
        self.assertEqual(BucketDetail.objects.count(), 0)
        self.assertEqual(Parameter.objects.count(), 0)

        # Import the same workbook again
        with open("workbook.xlsx", "rb") as f:
            response = self.client.post(
                "/execute/launch/importworkbook/", {"spreadsheet": f}
            )
            if not isinstance(response, StreamingHttpResponse):
                raise Exception("expected a streaming response")
            checkResponse(self, response)

        # Verify the new content is identical
        self.assertEqual(Buffer.objects.count(), countBuffer)
        self.assertEqual(CalendarBucket.objects.count(), countCalendarBucket)
        self.assertEqual(Calendar.objects.count(), countCalendar)
        self.assertEqual(Customer.objects.count(), countCustomer)
        self.assertEqual(Demand.objects.count(), countDemand)
        self.assertEqual(OperationMaterial.objects.count(), countOperationMaterial)
        self.assertEqual(Item.objects.count(), countItem)
        self.assertEqual(ItemDistribution.objects.count(), countItemDistribution)
        self.assertEqual(ItemSupplier.objects.count(), countItemSupplier)
        self.assertEqual(OperationResource.objects.count(), countOperationResource)
        self.assertEqual(Location.objects.count(), countLocation)
        self.assertEqual(PurchaseOrder.objects.count(), countPurchaseOrder)
        self.assertEqual(DistributionOrder.objects.count(), countDistributionOrder)
        self.assertEqual(ManufacturingOrder.objects.count(), countManufacturingOrder)
        self.assertEqual(Operation.objects.count(), countOperation)
        self.assertEqual(ResourceSkill.objects.count(), countResourceSkill)
        self.assertEqual(Resource.objects.count(), countResource)
        self.assertEqual(SetupMatrix.objects.count(), countSetupMatrix)
        self.assertEqual(Skill.objects.count(), countSkill)
        self.assertEqual(SubOperation.objects.count(), countSubOperation)
        self.assertEqual(Supplier.objects.count(), countSupplier)
        self.assertEqual(Bucket.objects.count(), countBucket)
        self.assertEqual(BucketDetail.objects.count(), countBucketDetail)
        self.assertEqual(Parameter.objects.count(), countParameter)
Exemple #8
0
    def test_create_and_edit(self):
        # Create a report
        self.assertEqual(SQLReport.objects.all().count(), 0)
        response = self.client.get("/reportmanager/schema/")
        checkResponse(self, response)
        response = self.client.post(
            "/reportmanager/",
            {
                "sql": "select name, cost, description from item",
                "save": "true",
                "name": "test report",
                "public": "false",
                "description": "my description",
            },
            HTTP_X_REQUESTED_WITH="XMLHttpRequest",
        )
        checkResponse(self, response)
        self.assertEqual(SQLReport.objects.all().count(), 1)
        self.assertEqual(SQLColumn.objects.all().count(), 3)
        report = SQLReport.objects.all()[0]
        self.assertEqual(report.name, "test report")
        self.assertEqual(report.sql,
                         "select name, cost, description from item")
        self.assertEqual(report.description, "my description")
        self.assertEqual(report.public, False)

        # Retrieve report data
        response = self.client.get("/reportmanager/%s/" % report.id)
        checkResponse(self, response)
        response = self.client.get("/reportmanager/%s/?format=json" %
                                   report.id)
        self.assertContains(response, '"records":7,')
        response = self.client.get("/reportmanager/%s/?format=csv" % report.id)
        checkResponse(self, response)
        response = self.client.get("/reportmanager/%s/?format=spreadsheet" %
                                   report.id)
        checkResponse(self, response)

        # Retrieve filtered and sorted report data
        response = self.client.get("/reportmanager/%s/" % report.id)
        checkResponse(self, response)
        fltr = quote(
            json.dumps({
                "groupOp": "AND",
                "rules": [{
                    "field": "name",
                    "op": "cn",
                    "data": "e"
                }],
            }))
        response = self.client.get(
            "/reportmanager/%s/?format=json&_search=true&filters=%s&searchField=&searchString=&searchOper="
            % (report.id, fltr))
        self.assertContains(response, '"records":1,')
        response = self.client.get("/reportmanager/%s/?format=csv&name__cn=a" %
                                   (report.id))
        cnt = 0
        for _ in response:
            cnt += 1
        self.assertEqual(cnt, 5)

        # Edit report
        response = self.client.post(
            "/reportmanager/%s/" % report.id,
            {
                "id": report.id,
                "save": "true",
                "sql":
                "select name, category, subcategory, cost, description from item",
                "name": report.name,
                "public": report.public,
            },
            HTTP_X_REQUESTED_WITH="XMLHttpRequest",
        )
        answer = json.loads(response.content.decode("utf-8"))
        self.assertEqual(answer["status"], "ok")
        response = self.client.post(
            "/reportmanager/%s/" % report.id,
            {
                "id": report.id,
                "save": "true",
                "sql": "a very bad SQL statement",
                "name": report.name,
                "public": report.public,
            },
            HTTP_X_REQUESTED_WITH="XMLHttpRequest",
        )
        answer = json.loads(response.content.decode("utf-8"))
        self.assertNotEqual(answer["status"], "ok")

        # Delete a report
        response = self.client.post(
            "/reportmanager/",
            {
                "id": report.id,
                "delete": "true"
            },
            HTTP_X_REQUESTED_WITH="XMLHttpRequest",
        )
        checkResponse(self, response)
        self.assertEqual(SQLReport.objects.all().count(), 0)
        self.assertEqual(SQLColumn.objects.all().count(), 0)
Exemple #9
0
 def test_output_pegging(self):
     response = self.client.get("/demandpegging/Demand%2001/?format=json")
     self.assertContains(response, '"records":1,')
     checkResponse(self, response)