Browse Source

Allow setting a status as closing even if the project has no close_status

When determining if a status "closes" tickets or not, we should first
check if it was set to and only if it wasn't then check if there was a
close_status set for it. Otherwise the logic wasn't correctly interpreted.

Fixes https://pagure.io/pagure/issue/4958

Signed-off-by: Pierre-Yves Chibon <pingou@pingoured.fr>
Pierre-Yves Chibon 3 years ago
parent
commit
05a5e4608b
2 changed files with 84 additions and 1 deletions
  1. 3 1
      pagure/api/boards.py
  2. 81 0
      tests/test_pagure_flask_api_boards.py

+ 3 - 1
pagure/api/boards.py

@@ -510,7 +510,9 @@ def api_board_status(repo, board_name, username=None, namespace=None):
 
         try:
             close_status = data[name].get("close_status") or None
-            close = data[name].get("close") or True if close_status else False
+            close = data[name].get("close") or (
+                True if close_status else False
+            )
             if close_status not in repo.close_status:
                 close_status = None
 

+ 81 - 0
tests/test_pagure_flask_api_boards.py

@@ -801,6 +801,87 @@ class PagureFlaskApiBoardsWithBoardtests(tests.SimplePagureTest):
             },
         )
 
+    def test_api_board_api_board_status_no_close_status(self):
+        headers = {
+            "Authorization": "token aaabbbcccddd",
+            "Content-Type": "application/json",
+        }
+
+        data = json.dumps(
+            {
+                "Backlog": {
+                    "close": False,
+                    "close_status": None,
+                    "bg_color": "#FFB300",
+                    "default": True,
+                    "rank": 1,
+                },
+                "Triaged": {
+                    "close": False,
+                    "close_status": None,
+                    "bg_color": "#ca0dcd",
+                    "default": False,
+                    "rank": 2,
+                },
+                "Done": {
+                    "close": True,
+                    "close_status": None,
+                    "bg_color": "#34d240",
+                    "default": False,
+                    "rank": 4,
+                },
+                "  ": {
+                    "close": True,
+                    "close_status": None,
+                    "bg_color": "#34d240",
+                    "default": False,
+                    "rank": 5,
+                },
+            }
+        )
+        output = self.app.post(
+            "/api/0/test/boards/dev/status", headers=headers, data=data
+        )
+        self.assertEqual(output.status_code, 200)
+        data = json.loads(output.get_data(as_text=True))
+        self.assertDictEqual(
+            data,
+            {
+                "board": {
+                    "active": True,
+                    "name": "dev",
+                    "status": [
+                        {
+                            "bg_color": "#FFB300",
+                            "close": False,
+                            "close_status": None,
+                            "default": True,
+                            "name": "Backlog",
+                        },
+                        {
+                            "bg_color": "#ca0dcd",
+                            "close": False,
+                            "close_status": None,
+                            "default": False,
+                            "name": "Triaged",
+                        },
+                        {
+                            "name": "Done",
+                            "close": True,
+                            "close_status": None,
+                            "default": False,
+                            "bg_color": "#34d240",
+                        },
+                    ],
+                    "tag": {
+                        "tag": "dev",
+                        "tag_color": "DeepBlueSky",
+                        "tag_description": "",
+                    },
+                }
+            },
+        )
+
     def test_api_board_api_board_status_adding_removing(self):
         headers = {
             "Authorization": "token aaabbbcccddd",