コード例 #1
0
 def test_require_one_returns_data_with_invalids_removed(self):
     data = {
         "a": Invalid("a"), "b": 1, "c": "abc",
         "d": Invalid("d"), "e": 2, "f": 3
     }
     req = require_one("a", "b", "d", "f")
     val = req(InvalidGroup("", [data["a"], data["d"]], data))
     self.assertEqual(val, {"b": 1, "c": "abc", "e": 2})
コード例 #2
0
    def test_more_advanced_integration_test(self):
        def percents_add_to_100(data):
            total = 0
            for project in data:
                total += project["percentage"]
            if total != 100:
                raise Invalid("the percentages must add up to 100")
            return data

        def check_required_by(data):
            return "required_by_type" in data and data["required_by_type"] == "later"
        s = Schema(
            Chain(
                {
                    "description": All(str, when_empty(Invalid)),
                    "justification": All(str, when_empty(Invalid)),
                    "is_tech_purchase": All(bool, when_empty(False)),
                    "projects": All(
                        [{
                            "id": All(int, when_empty(Undefined)),
                            "project_id": All(int, when_empty(Invalid)),
                            "percentage": All(
                                int, in_range(1, 100), when_empty(Invalid))
                        }],
                        percents_add_to_100
                    ),
                    "vendor": All(str, when_empty(Invalid)),
                    "vendor_id": All(int, when_empty(Invalid)),
                    "required_by_type": All(str, in_list(["now", "later"])),
                    "date_required_by": All(int, when_empty(Invalid))
                },
                require_one("vendor_id", "vendor"),
                require_if("date_required_by", check_required_by)))
        data = {
            "description": "abc",
            "justification": "def",
            "projects": [
                {"project_id": 4, "percentage": 10},
                {"id": 2, "project_id": 5, "percentage": 90}
            ],
            "vendor": "ABC co.",
            "required_by_type": "later",
            "date_required_by": 1234
        }
        val = s(data)
        self.assertEqual(
            val, {
                "description": "abc",
                "justification": "def",
                "is_tech_purchase": False,
                "projects": [
                    {"project_id": 4, "percentage": 10},
                    {"id": 2, "project_id": 5, "percentage": 90}
                ],
                "vendor": "ABC co.",
                "required_by_type": "later",
                "date_required_by": 1234
            })
コード例 #3
0
 def test_require_one_returns_an_invalid_group_with_invalids_removed(self):
     data = {
         "a": Invalid("a"), "b": 1, "c": Invalid("c"),
         "d": Invalid("d"), "e": 2, "f": 3
     }
     req = require_one("a", "b", "d", "f")
     with self.assertRaises(InvalidGroup) as cm:
         req(InvalidGroup("", [data["a"], data["c"], data["d"]], data))
     self.assertEqual(str(cm.exception), "c")
     self.assertEqual(cm.exception.data, {"b": 1, "c": data["c"], "e": 2})
コード例 #4
0
 def test_require_one_returns_data_with_invalids_removed(self):
     data = {
         "a": Invalid("a"),
         "b": 1,
         "c": "abc",
         "d": Invalid("d"),
         "e": 2,
         "f": 3
     }
     req = require_one("a", "b", "d", "f")
     val = req(InvalidGroup("", [data["a"], data["d"]], data))
     self.assertEqual(val, {"b": 1, "c": "abc", "e": 2})
コード例 #5
0
 def test_require_one_returns_an_invalid_group_with_invalids_removed(self):
     data = {
         "a": Invalid("a"),
         "b": 1,
         "c": Invalid("c"),
         "d": Invalid("d"),
         "e": 2,
         "f": 3
     }
     req = require_one("a", "b", "d", "f")
     with self.assertRaises(InvalidGroup) as cm:
         req(InvalidGroup("", [data["a"], data["c"], data["d"]], data))
     self.assertEqual(str(cm.exception), "c")
     self.assertEqual(cm.exception.data, {"b": 1, "c": data["c"], "e": 2})
コード例 #6
0
 def test_require_one_returns_data_with_data_removed(self):
     data = {"a": 0, "b": 1, "c": "abc", "d": "def", "e": 2, "f": 3}
     req = require_one("a", "b", "d", "f")
     val = req(data)
     self.assertEqual(val, {"a": 0, "c": "abc", "e": 2})
コード例 #7
0
    def test_more_advanced_integration_test(self):
        def percents_add_to_100(data):
            total = 0
            for project in data:
                total += project["percentage"]
            if total != 100:
                raise Invalid("the percentages must add up to 100")
            return data

        def check_required_by(data):
            return "required_by_type" in data and data[
                "required_by_type"] == "later"

        s = Schema(
            Chain(
                {
                    "description":
                    All(str, when_empty(Invalid)),
                    "justification":
                    All(str, when_empty(Invalid)),
                    "is_tech_purchase":
                    All(bool, when_empty(False)),
                    "projects":
                    All([{
                        "id":
                        All(int, when_empty(Undefined)),
                        "project_id":
                        All(int, when_empty(Invalid)),
                        "percentage":
                        All(int, in_range(1, 100), when_empty(Invalid))
                    }], percents_add_to_100),
                    "vendor":
                    All(str, when_empty(Invalid)),
                    "vendor_id":
                    All(int, when_empty(Invalid)),
                    "required_by_type":
                    All(str, in_list(["now", "later"])),
                    "date_required_by":
                    All(int, when_empty(Invalid))
                }, require_one("vendor_id", "vendor"),
                require_if("date_required_by", check_required_by)))
        data = {
            "description":
            "abc",
            "justification":
            "def",
            "projects": [{
                "project_id": 4,
                "percentage": 10
            }, {
                "id": 2,
                "project_id": 5,
                "percentage": 90
            }],
            "vendor":
            "ABC co.",
            "required_by_type":
            "later",
            "date_required_by":
            1234
        }
        val = s(data)
        self.assertEqual(
            val, {
                "description":
                "abc",
                "justification":
                "def",
                "is_tech_purchase":
                False,
                "projects": [{
                    "project_id": 4,
                    "percentage": 10
                }, {
                    "id": 2,
                    "project_id": 5,
                    "percentage": 90
                }],
                "vendor":
                "ABC co.",
                "required_by_type":
                "later",
                "date_required_by":
                1234
            })
コード例 #8
0
 def test_require_one_returns_data_with_data_removed(self):
     data = {"a": 0, "b": 1, "c": "abc", "d": "def", "e": 2, "f": 3}
     req = require_one("a", "b", "d", "f")
     val = req(data)
     self.assertEqual(val, {"a": 0, "c": "abc", "e": 2})